如何使用数组方法将具有相同 属性 值的对象合并到数组中
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);
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);