合并数组中具有相同 id 的对象

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)

我已经进行了多次尝试,但仍然没有找到一种优雅的方法。

Dom*_*nic 7

您可以创建一个以 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)