我有一个包含多个条目/键的对象。每个键映射到一个包含一个或多个条目的数组。我的目标是通过在第一个位置找到的 filterGroupDisplayOrder 对 obj 中的键进行排序,并将它们返回到它们自己的数组中。示例:
想要的结果
['apple', 'kiwi', 'watermelon', 'orange', 'blueberry', 'grape'] // keys sorted by filterGroupDisplayOrder 10, 20, 30, 40, 50, 60
示例对象
const obj = {
"apple": [
{
"filterGroupId": "apple",
"filterGroupLabelKey": "Apple",
"filterGroupDisplayOrder": 10,
}
],
"orange": [
{
"filterGroupId": "orange",
"filterGroupLabelKey": "Orange",
"filterGroupDisplayOrder": 40
}
],
"grape": [
{
"filterGroupId": "grape",
"filterGroupLabelKey": "Grape",
"filterGroupDisplayOrder": 60
}
]
"kiwi": [
{
"filterGroupId": "kiwi",
"filterGroupLabelKey": "Kiwi",
"filterGroupDisplayOrder": 20
}
],
"watermelon": [
{
"filterGroupId": "watermelon",
"filterGroupLabelKey": "Watermelon",
"filterGroupDisplayOrder": 30
}
],
"blueberry": [
{
"filterGroupId": "blueberry",
"filterGroupLabelKey": "Blueberry",
"filterGroupDisplayOrder": 50
}
]
}
答案 0 :(得分:1)
您可以使用 Object.keys()
获取键列表,然后使用对象的 filterGroupDisplayValues 对其进行排序。 (因为你说每个顶级键的显示顺序总是相同的,我在这里只使用了每个数组中的第一个。)
const obj = { "apple": [{ "filterGroupId": "apple", "filterGroupLabelKey": "Apple", "filterGroupDisplayOrder": 10, }], "orange": [{ "filterGroupId": "orange", "filterGroupLabelKey": "Orange", "filterGroupDisplayOrder": 40 }], "grape": [{ "filterGroupId": "grape", "filterGroupLabelKey": "Grape", "filterGroupDisplayOrder": 60 }], "kiwi": [{ "filterGroupId": "kiwi", "filterGroupLabelKey": "Kiwi", "filterGroupDisplayOrder": 20 }], "watermelon": [{ "filterGroupId": "watermelon", "filterGroupLabelKey": "Watermelon", "filterGroupDisplayOrder": 30 }], "blueberry": [{ "filterGroupId": "blueberry", "filterGroupLabelKey": "Blueberry", "filterGroupDisplayOrder": 50 }] }
const output = Object.keys(obj).sort((a, b) => {
return obj[a][0].filterGroupDisplayOrder - obj[b][0].filterGroupDisplayOrder
})
console.log(output)
答案 1 :(得分:1)
试试运行这个:
Object.entries(obj).sort((a, b) => {return a[1][0].filterGroupDisplayOrder - b[1][0].filterGroupDisplayOrder}).map(e => e[0]);
答案 2 :(得分:0)
obj
从对象 Object.entries
创建一个嵌套数组。filterGroupDisplayOrder
按 Array#sort
对该嵌套数组进行排序。Array#map
提取密钥。const
obj={apple:[{filterGroupId:"apple",filterGroupLabelKey:"Apple",filterGroupDisplayOrder:10}],orange:[{filterGroupId:"orange",filterGroupLabelKey:"Orange",filterGroupDisplayOrder:40}],grape:[{filterGroupId:"grape",filterGroupLabelKey:"Grape",filterGroupDisplayOrder:60}],kiwi:[{filterGroupId:"kiwi",filterGroupLabelKey:"Kiwi",filterGroupDisplayOrder:20}],watermelon:[{filterGroupId:"watermelon",filterGroupLabelKey:"Watermelon",filterGroupDisplayOrder:30}],blueberry:[{filterGroupId:"blueberry",filterGroupLabelKey:"Blueberry",filterGroupDisplayOrder:50}]},
res = Object.entries(obj)
.sort(([, [a]], [, [b]]) => {
return a.filterGroupDisplayOrder - b.filterGroupDisplayOrder;
})
.map(([k]) => k);
console.log(res);
答案 3 :(得分:0)
const obj={apple:[{filterGroupId:"apple",filterGroupLabelKey:"Apple",filterGroupDisplayOrder:10}],orange:[{filterGroupId:"orange",filterGroupLabelKey:"Orange",filterGroupDisplayOrder:40}],grape:[{filterGroupId:"grape",filterGroupLabelKey:"Grape",filterGroupDisplayOrder:60}],kiwi:[{filterGroupId:"kiwi",filterGroupLabelKey:"Kiwi",filterGroupDisplayOrder:20}],watermelon:[{filterGroupId:"watermelon",filterGroupLabelKey:"Watermelon",filterGroupDisplayOrder:30}],blueberry:[{filterGroupId:"blueberry",filterGroupLabelKey:"Blueberry",filterGroupDisplayOrder:50}]};
const res = Object.values(obj)
.map(v => v[0])
.sort((a,b) => a.filterGroupDisplayOrder - b.filterGroupDisplayOrder)
.map(e => e.filterGroupId)
console.log(res)