Сортировка многомерного массива 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
Что я не так делаю?
Roman
12 февраля 2018, 09:11
modx.pro
2 069
-1

Комментарии: 6

Алексей Ерохин
12 февраля 2018, 14:34
0
У вас объект а sort метод для массивов.
Нужно пройти по всем объектам внутри корневого и пихнуть их в массив
    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
      Алексей Ерохин
      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;
      	}
      });
        Roman
        13 февраля 2018, 15:46
        0
        И еще вопрос, если возвращается отрицательное значение (return -1) то элемент массива перебрасывается назад?
          Алексей Ерохин
          13 февраля 2018, 15:51
          +1
          Если a меньше b, то возвращается отрицательное значение и a в массиве присваивается меньший индекс чем b, то есть сортировка по возрастанию.
            Roman
            13 февраля 2018, 15:57
            0
            Я понял. Спасибо за развернутый ответ!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    6