我有这个对象数组,如下
let data = [
{ "id": "12", "values": [ "_status.com", "_verify.com" ] },
{ "id": "12", "values": [ "_result.com"] },
{ "id": "15", "values": [ "_integrate.com"] }
]
如果您注意到,对象数组有 2 个具有相同 id
12
的对象,并且 values
中组合在一起有 3 个变量。同样,id 15
只有一个值变量。
我如何将它们组合在一起并将 value 属性累积在一个数组中。我想达到以下结果。
let result = [
{ "id": "12", "values": [ "_status.com", "_verify.com", "_result.com" ] },
{ "id": "15", "values": [ "_integrate.com"] }
]
有人可以让我知道如何实现这一目标吗?我确实在网上搜索了有关对象数组迭代的信息,但这是一个非常独特且不同的示例,我找不到任何接近解决它的东西。
通过迭代 reduce
数组来使用
data
。id
的条目 (acc
):
Object.values()
将累加值提取为数组并将其分配给结果变量
let data = [
{ "id": "12", "values": [ "_status.com", "_verify.com" ] },
{ "id": "12", "values": [ "_result.com"] },
{ "id": "15", "values": [ "_integrate.com"] }
];
let result = Object.values(data.reduce((acc, {id, values}) => {
if (!acc[id]) {
acc[id] = { id, values: [] };
}
acc[id].values = acc[id].values.concat(values);
return acc;
}, {}));
console.log(result);
您还可以
Object.groupBy
id
然后 map()
对象来组合 values
let data = [
{ "id": "12", "values": [ "_status.com", "_verify.com" ] },
{ "id": "12", "values": [ "_result.com"] },
{ "id": "15", "values": [ "_integrate.com"] }
]
const grouped = Object.groupBy(data, s => s.id);
const combined = Object.keys(grouped).map(id => (
{ id, values: grouped[id].flatMap(f => f.values) }
));
console.log(combined);
// Same as above, but as an one-liner
const result = Object.keys(Object.groupBy(data, s => s.id)).map(id => ({ id, values: grouped[id].flatMap(f => f.values) }));