如何使用数组方法将具有相同 属性 值的对象合并到数组中

How to use array method to combine objects with same property value in an array

const input = [{diagramId: 123, data: [{id: 1, content: content1}]},
                  {diagramId: 123, data: [{id: 2, content: content2}, 
                                          {id: 23, content: conent23}] },
                  {diagramId: 234, data: [{id: 3, content: content3}]}]

Desired output: 
const output = [{diagramId: 123, data: [{id: 1, content: content1},
                                        {id: 2, content: content2},
                                        {id: 23, content: content23}]}, 
                {diagramId: 234, data: [{id: 3, content: content3}]}]
                                         

正如您在上面所看到的,我想通过数组方法将共享相同 属性 值 (diagramId) 的对象组合起来,形成一个新对象,将它们的另一个 属性在另一个 属性.

下一起组成一个数组

我使用了 for 循环,但由于可读性问题被 PR 拒绝了。 是否可以使用 Array.reduce() 来做到这一点?

是的,您可以使用 reduce

轻松实现此目的

const input = [
  { diagramId: 123, data: [{ id: 1, content: "content1" }] },
  {
    diagramId: 123,
    data: [
      { id: 2, content: "content2" },
      { id: 23, content: "conent23" },
    ],
  },
  { diagramId: 234, data: [{ id: 3, content: "content3" }] },
];


const result = input.reduce((acc, curr) => {
  const { diagramId, data } = curr;
  const findObj = acc.find((o) => o.diagramId === diagramId);
  if (!findObj) {
    acc.push({ diagramId, data });
  } else {
    findObj.data.push(...data);
  }
  return acc;
}, []);

console.log(result);