mic*_*est 4 javascript ecmascript-6
我想我有一个非常简单的问题,但仍然没有找到解决方案。我有一个看起来像这样的数组:
var originalArray = [{
id: 1,
elements: [1, 2]
},
{
id: 1,
elements: [3, 4]
},
{
id: 5,
elements: ['a', 'b']
},
{
id: 5,
elements: ['c', 'd']
}, {
id: 27,
elements: []
}]
Run Code Online (Sandbox Code Playgroud)
我想将其修改为如下所示(按 id 和 join 元素合并):
newArray = [{
id: 1,
elements: [1, 2, 3, 4]
}, {
id: 5,
elements: ['a', 'b', 'c', 'd']
}, {
id: 27,
elements: []
}]
Run Code Online (Sandbox Code Playgroud)
我已经进行了多次尝试,但仍然没有找到一种优雅的方法。
您可以创建一个以 ID 为键的对象并将具有相同 ID 的元素推送给它们,然后转换回数组。对于较大的数组,这比在每次迭代中循环更有效:
var originalArray = [{
id: 1,
elements: [1, 2]
},
{
id: 1,
elements: [3, 4]
},
{
id: 5,
elements: ['a', 'b']
},
{
id: 5,
elements: ['c', 'd']
}, {
id: 27,
elements: []
}];
const arrayHashmap = originalArray.reduce((obj, item) => {
obj[item.id] ? obj[item.id].elements.push(...item.elements) : (obj[item.id] = { ...item });
return obj;
}, {});
const mergedArray = Object.values(arrayHashmap);
console.log(mergedArray);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6811 次 |
| 最近记录: |