将数组重组为输出的最佳方法是什么?我需要将具有相同键的值合并到一个对象数组中。
输入数组:
var array = [
{
aaa: {
name: "foo1",
value: "val1"
}
},
{
aaa: {
name: "foo2",
value: "val2"
}
},
{
bbb: {
name: "foo3",
value: "val3"
}
},
{
bbb: {
name: "foo4",
value: "val4"
}
}
];
所需的输出:
var output = [
{
aaa:
[{
name: "foo1",
value: "val1"
},{
name: "foo2",
value: "val2"
}]
},
{
bbb:
[{
name: "foo3",
value: "val3"
},{
name: "foo4",
value: "val4"
}]
}
];
实现这一目标的最佳方法是什么? 提前谢谢。
答案 0 :(得分:2)
您可以使用reduce
var array = [{aaa: {name: "foo1",value: "val1"}},{aaa: {name: "foo2",value: "val2"}},{bbb: {name: "foo3",value: "val3"}},{bbb: {name: "foo4",value: "val4"}}];
var newArray = array.reduce((c, v) => {
for (var k in v) {
c[k] = c[k] || [];
c[k].push(v[k]);
}
return c;
}, {});
console.log(newArray);
Doc:reduce()
答案 1 :(得分:2)
您可以使用reduce
和forEach
功能。
var array = [{ aaa: { name: "foo1", value: "val1" } }, { aaa: { name: "foo2", value: "val2" } }, { bbb: { name: "foo3", value: "val3" } }, { bbb: { name: "foo4", value: "val4" } }];
var result = array.reduce((a, c) => {
Object.keys(c).forEach((k) => {
if (a[k]) {
a[k].push(c[k]);
} else {
a[k] = [c[k]];
}
})
return a;
}, {});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }