我有一个包含多个数组的数组,其中包含对象(来自HTTP请求的响应)
大数组:
datas = [
[
{
data: {
pid: 107,
value: 5
}
status: 200
},
{
data: {
pid: 108,
value: 42
}
}
],
[
{
data: {
pid: 107,
value: 64
}
status: 200
},
{
data: {
pid: 108,
value: 322
}
}
]
]
好吧,那么我如何制作一个新的数组(或对象),该数组按pid和一个分配了pid的值求和? 这不是在数组内部具有SUM by属性的典型问题。
我尝试过的事情:
datas.forEach((d,k1) => {
d.forEach((e,k2) => {
total += e.data.value
newArr[k2] = total;
})
})
答案 0 :(得分:2)
您可以将Array.prototype.reduce
与内部Array.prototype.forEach
一起使用,以遍历内部数组并将PID分组为Object
:
const data = [
[
{
data: {
pid: 107,
value: 5
},
status: 200
},
{
data: {
pid: 108,
value: 42
}
}
],
[
{
data: {
pid: 107,
value: 64
},
status: 200
},
{
data: {
pid: 108,
value: 322
}
}
]
];
const merged = data.reduce((merged, innerArr) => {
innerArr.forEach(({data}) => {
merged[data.pid] = (merged[data.pid] || 0) + data.value;
});
return merged;
}, {});
console.log(merged);