【发布时间】:2021-07-27 02:25:30
【问题描述】:
我有一个对象数组 (groceryArray),我想通过 groupId 属性(对象键)将它们组织成一个对象,最后通过 groupDisplayOrder 属性对这些键进行排序。请参阅 finalOutput 以获得所需的结果。
const groceryArray = [
{ id: 'apples', groupId: 'produce', groupDisplayOrder: 1 },
{ id: 'chicken', groupId: 'meat', groupDisplayOrder: 3 },
{ id: 'shrimp', groupId: 'seafood', groupDisplayOrder: 4 },
{ id: 'milk', groupId: 'dairy', groupDisplayOrder: 2 },
{ id: 'carrots', groupId: 'produce', groupDisplayOrder: 1 },
{ id: 'salmon', groupId: 'seafood', groupDisplayOrder: 4 }
]
期望的结果
const finalOutput = {
produce: [{ id: 'apples', groupId: 'produce', groupDisplayOrder: 1 }, { id: 'carrots', groupId: 'produce', groupDisplayOrder: 1 }],
dairy: [{ id: 'milk', groupId: 'dairy', groupDisplayOrder: 2 }],
meat: [{ id: 'chicken', groupId: 'meat', groupDisplayOrder: 3 }],
seafood: [{ id: 'shrimp', groupId: 'seafood', groupDisplayOrder: 4 }, { id: 'salmon', groupId: 'seafood', groupDisplayOrder: 4 }]
}
这是我当前的代码......我想我可能做了太多的步骤。我想知道是否有一种方法可以同时减少和排序?
const groceriesGroupedById = groceryArray.reduce((acc, cur) => {
if (cur.groupId) {
(acc[cur.groupId] || (acc[cur.groupId] = [])).push(cur)
}
return acc
}, {})
const sortedGroupIds = Object.keys(groceriesGroupedById).sort((a, b) => {
return groceriesGroupedById[a][0].groupDisplayOrder - groceriesGroupedById[b][0].groupDisplayOrder
})
const finalOutput = sortedGroupIds.reduce((acc, key) => ( acc[key] = groceriesGroupedById[key], acc ), {})
【问题讨论】:
-
谁关闭了这个?你能重新打开吗...这是不同的,因为我要求分组和排序...
标签: javascript arrays object ecmascript-6 reduce