把对象中多个数组对象中相同id的value值相加,生成原来结构的数据
时间: 2024-05-09 14:19:38 浏览: 86
详解JS取出两个数组中的不同或相同元素
假设有以下对象:
```javascript
const obj = {
data: [
{ id: 1, value: 10 },
{ id: 2, value: 20 },
{ id: 3, value: 30 },
{ id: 4, value: 40 }
],
data2: [
{ id: 1, value: 5 },
{ id: 2, value: 10 },
{ id: 3, value: 15 },
{ id: 4, value: 20 }
]
};
```
我们可以使用reduce方法来实现将多个数组对象中相同id的value值相加的操作,然后生成原来结构的数据:
```javascript
const result = Object.keys(obj).reduce((acc, key) => {
obj[key].forEach(item => {
const { id, value } = item;
if (!acc[id]) {
acc[id] = { id, value };
} else {
acc[id].value += value;
}
});
return acc;
}, {});
const finalResult = { data: Object.values(result) };
```
我们首先使用Object.keys方法获取obj对象的所有key值,然后使用reduce方法遍历这些key值,并且对每个key值对应的数组对象进行遍历,将相同id的value值相加。最后,我们使用Object.values方法将result对象的所有value值提取出来,作为finalResult对象的data属性的值。
最终生成的finalResult对象如下所示:
```javascript
{
data: [
{ id: 1, value: 15 },
{ id: 2, value: 30 },
{ id: 3, value: 45 },
{ id: 4, value: 60 }
]
}
```
阅读全文