Сортировка многослойного объекта по элементу нижнего уровня - PullRequest
0 голосов
/ 03 августа 2020

У меня есть объект, который выглядит так

[{group: 'Group-B', items[{ count : 3, item : 'item-A' }]},
 {group: 'Group-B', items[{ count : 8, item : 'item-C' }]},
 {group: 'Group-A', items[{ count : 4, item : 'item-H' }]},
 {group: 'Group-C', items[{ count : 2, item : 'item-F' }]}
]

РЕЗУЛЬТАТ должен быть следующим: desc by count

[{group: 'Group-B', items[{ count : 8, item : 'item-C' }]},
 {group: 'Group-A', items[{ count : 4, item : 'item-H' }]},
 {group: 'Group-B', items[{ count : 3, item : 'item-A' }]},
 {group: 'Group-C', items[{ count : 2, item : 'item-F' }]}
]

Мне нужно отсортировать весь этот объект по count. Я смотрел lodash, но не могу понять, как это сделать.

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 03 августа 2020

надеюсь, что это поможет. вы можете удалить функцию .slice (), если не хотите создавать копию исходного массива.

let obj = [
    {group: 'Group-B', items: [{count: 3, item: 'item-A'}]},
    {group: 'Group-B', items: [{count: 8, item: 'item-C'}]},
    {group: 'Group-A', items: [{count: 4, item: 'item-H'}]},
    {group: 'Group-C', items: [{count: 2, item: 'item-F'}]}
]
console.log(obj)

let sorted = obj.slice().sort((a,b) => {
    if(a.items[0].count < b.items[0].count){
        return -1
    }
    if(a.items[0].count > b.items[0].count){
        return 1
    }
    else
        return 0
});
console.log(sorted)
0 голосов
/ 03 августа 2020

Если вы хотите отсортировать по количеству элементов в элементах, вы можете сделать это:

myArray.sort(function(itemA, itemB) {return itemA.items.count - itemB.items.count; });

, если вы хотите отсортировать по атрибуту «count», который есть в каждом элементе в массиве items, вам нужно будет подробно описать, как вы сравниваете эти элементы. Но то, что вы ищете, должно быть функцией Array.sort (): https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/sort

0 голосов
/ 03 августа 2020

Можно так

const array = [
 {group: 'Group-B', items:[{ count : 3, item : 'item-A' }]},
 {group: 'Group-B', items:[{ count : 8, item : 'item-C' }]},
 {group: 'Group-A', items:[{ count : 4, item : 'item-H' }]},
 {group: 'Group-C', items:[{ count : 2, item : 'item-F' }]}
]

const result = array.sort((a, b) => {
  return a.items[0].count - b.items[0].count
})

console.log(JSON.stringify(result))
...