Сортировка многомерного массива JS
Все привет! Делаю калькулятор расчета леса (https://krovlya-yuga.ru/kalkulyator-lesa/), данные передаю из php файла, где формируется многомерный массив посредсовом JSON. При сортировке возникла проблема. В консоле массив имеет вид
Обращаюсь к нему так: db[selected_options.cover][«type»][selected_options.decking][«kind»]
Как его отсортировать по полю name?
Сортировка такого вида не помогает:
at :1:73
Что я не так делаю?
{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
Как его отсортировать по полю 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 functionat :1:73
Что я не так делаю?
Комментарии: 6
У вас объект а sort метод для массивов.
Нужно пройти по всем объектам внутри корневого и пихнуть их в массив
Нужно пройти по всем объектам внутри корневого и пихнуть их в массив
Массив получил, отсортировал его. Но вот беда в том что у меня идет сортировка по полю width_planks, а нужно чтобы еще и учитывалось поле height_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
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
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;
}
});
И еще вопрос, если возвращается отрицательное значение (return -1) то элемент массива перебрасывается назад?
Если a меньше b, то возвращается отрицательное значение и a в массиве присваивается меньший индекс чем b, то есть сортировка по возрастанию.
Я понял. Спасибо за развернутый ответ!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.