Сортировка многомерного массива JS Решено

Дополнение: JS

Все привет! Делаю калькулятор расчета леса (https://krovlya-yuga.ru/kalkulyator-lesa/), данные передаю из php файла, где формируется многомерный массив посредсовом JSON. При сортировке возникла проблема. В консоле массив имеет вид
{0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…}, 5: {…}, 6: {…}, 7: {…}, 8: {…}, 9: {…}, 10: {…}}
0:{name: "200x50", width_planks: "200", height_planks: "50", sort: "1", price: "10100.00", …}
1:{name: "100x25", width_planks: "100", height_planks: "25", sort: "1", price: "10100.00", …}
2:{name: "100x32", width_planks: "100", height_planks: "32", sort: "1", price: "10400.00", …}
3:{name: "150x100", width_planks: "150", height_planks: "100", sort: "1", price: "10400.00", …}
4:{name: "150x25", width_planks: "150", height_planks: "25", sort: "1", price: "10100.00", …}
5:{name: "125x25", width_planks: "125", height_planks: "25", sort: "1", price: "10100.00", …}
6:{name: "100x50", width_planks: "100", height_planks: "50", sort: "1", price: "10100.00", …}
7:{name: "120x50", width_planks: "120", height_planks: "50", sort: "1", price: "10100.00", …}
8:{name: "150x50", width_planks: "150", height_planks: "50", sort: "1", price: "10100.00", …}
9:{name: "150x150", width_planks: "150", height_planks: "150", sort: "1", price: "10400.00", …}
10:{name: "100x100", width_planks: "100", height_planks: "100", sort: "1", price: "10400.00", …}
__proto__
:
Object

Обращаюсь к нему так: db[selected_options.cover][«type»][selected_options.decking][«kind»]
Как его отсортировать по полю name?
Сортировка такого вида не помогает:
db[selected_options.cover]["type"][selected_options.decking]["kind"].sort(function (a, b) {
  if (a.name > b.name) {
    return 1;
  }
  if (a.name < b.name) {
    return -1;
  }
  // a должно быть равным b
  return 0;
});
 
В консоли ошибка: Uncaught TypeError: db[selected_options.cover].type[selected_options.decking].kind[i].sort is not a function
at :1:73
Что я не так делаю?
12 февраля 2018, 12:11    Roman   
0    50 -1

Комментарии ()

  1. Алексей Ерохин 12 февраля 2018, 14:34 # 0
    У вас объект а sort метод для массивов.
    Нужно пройти по всем объектам внутри корневого и пихнуть их в массив
    1. Roman 13 февраля 2018, 15:31 # 0
      Массив получил, отсортировал его. Но вот беда в том что у меня идет сортировка по полю width_planks, а нужно чтобы еще и учитывалось поле height_planks.
      sorted_array.sort(function (a, b) {
      return a.width_planks - b.width_planks;
      });
      т.е. после сортировки получилось:
      width_planks x height_planks
      100 x 50
      100 x 100
      200 x 150
      200 x 120
      Сейчас же результат сортировки:
      width_planks x height_planks
      100 x 100
      100 x 50
      200 x 120
      200 x 150
      1. Алексей Ерохин 13 февраля 2018, 15:39 # +1
        sorted_array.sort(function (a, b) {
        	if (a.width_planks == b.width_planks ) {
        		return a.height_planks - b.height_planks;
        	} else {
        		return a.width_planks - b.width_planks;
        	}
        });
        
        1. Roman 13 февраля 2018, 15:46 # 0
          И еще вопрос, если возвращается отрицательное значение (return -1) то элемент массива перебрасывается назад?
          1. Алексей Ерохин 13 февраля 2018, 15:51 # +1
            Если a меньше b, то возвращается отрицательное значение и a в массиве присваивается меньший индекс чем b, то есть сортировка по возрастанию.
            1. Roman 13 февраля 2018, 15:57 # 0
              Я понял. Спасибо за развернутый ответ!
    Вы должны авторизоваться, чтобы оставлять комментарии.