我正在尝试寻找一种优雅而高效的方法来将对象数组转换为由键(在本例中为"groupByThisKey")索引的对象。一个hashmap,我相信它叫做。
我想出了一个原始版本
下面用一些数据进行了解释:
const arr = [
{
id: 1,
name: "one",
groupByThisKey: 'groupA'
},
{
id: 2,
name: "two",
groupByThisKey: 'groupB'
},
{
id: 3,
name: "three",
groupByThisKey: 'groupB'
},
{
id: 4,
name: "four",
groupByThisKey: 'groupA'
}
];
const groupedByKey = {};
arr.map(obj => {
if (groupedByKey[obj.groupByThisKey])
groupedByKey[obj.groupByThisKey].push(obj)
else
groupedByKey[obj.groupByThisKey] = [obj]
});
console.log(groupedByKey)
它确实给出了所需的输出:
{
groupA: [
{
id: 1,
name: "one",
groupByThisKey: 'groupA'
},
{
id: 4,
name: "four",
groupByThisKey: 'groupA'
}
],
groupB: [
{
id: 2,
name: "two",
groupByThisKey: 'groupB'
},
{
id: 3,
name: "three",
groupByThisKey: 'groupB'
}
]
}
但以一种相当原始的方式。我更愿意使用一种更短、更现代的方法来完成这项工作,如果可能的话,可以使用object.assign或reduce,但我不能理解它,因为我需要为每个键使用一个值数组。
我能够找到许多示例,这些示例似乎都适用于每个键只有一个值的用例,但在我的示例中,我需要一个由该键分组的对象的数组,所以我找到的示例只接受最新的值。下面是一个例子:
const hash = Object.assign({}, ...array.map(s => ({[s.key]: s.value})));
https://stackoverflow.com/questions/55799551
复制相似问题