Javascript:合并数组中具有相同键的对象不起作用



我正在尝试将相同的组名合并在一起。我四处寻找如何做到这一点的想法,所以我做了一些研究,并写下了以下代码。

这是我的实现不起作用:

const input = [ 
{ people: [{ names: "John" }, { names: "Sam" }], group: "one", },
{ people: [{ names: "George" }], group: "one", },
{ people: [{ names: "Bella" }], group: "two",},
];

var output = [];
input.forEach(function(item) {
var existing = output.filter(function(v, i) {
return v.group == item.group;
});
if (existing.length) {
var existingIndex = output.indexOf(existing[0]);
output[existingIndex].people = output[existingIndex].people.concat(item.people);
}
});
console.log(output)

期望输出:

const output = [
{
people: [{ names: "John" }, { names: "Sam" }, { names: "George" }],
group: "one",
},
{
people: [{ names: "Bella" }],
group: "two",
},
];
  • 使用Array.reduce,可以使用group键按当前数组进行分组
  • 从这个分组对象中,您可以得到您想要的结果

const input = [
{
people: [{ names: "John" }, { names: "Sam" }],
group: "one",
},
{
people: [{ names: "George" }],
group: "one",
},
{
people: [{ names: "Bella" }],
group: "two",
},
];
const groupByKey = input.reduce((acc, cur) => {
acc[cur.group] ? acc[cur.group].people.push(...cur.people) : acc[cur.group] = cur;
return acc;
}, {});
const output = Object.values(groupByKey);
console.log(output);

最新更新