把对象中多个数组对象中id相同的value值相加,生成原来结构的数据
时间: 2024-04-29 13:23:37 浏览: 104
数据结构与算法基础课程 C语言C++程序语言设计教程8_1集合与查找(静态查找、哈希、二叉排序树、平衡二叉树)共28页.pptx
假设有以下对象:
```
const data = {
"id": 1,
"name": "Alice",
"items": [
{
"id": 1,
"value": 10
},
{
"id": 2,
"value": 20
},
{
"id": 3,
"value": 30
}
]
};
```
我们需要将 `data.items` 数组中 `id` 相同的元素的 `value` 值相加,生成原来结构的数据。
可以使用以下代码实现:
```
const result = {
...data,
items: Object.values(data.items.reduce((acc, item) => {
const existingItem = acc[item.id];
if (existingItem) {
existingItem.value += item.value;
} else {
acc[item.id] = { ...item };
}
return acc;
}, {}))
};
```
解释一下代码:
首先使用扩展运算符将 `data` 对象浅拷贝到 `result` 对象中,这样就保留了原始的结构。
然后使用 `reduce` 方法遍历 `data.items` 数组。在 `reduce` 的回调函数中,使用 `acc` 参数来存储累加的结果。如果 `acc` 中已经存在当前元素的 `id` 属性,说明之前已经遇到过相同 `id` 的元素,那么就将其 `value` 值加上当前元素的 `value` 值。否则,就将当前元素以浅拷贝的方式添加到 `acc` 中。
遍历结束后,使用 `Object.values` 方法将 `acc` 转换成一个数组并返回。最后将这个数组赋值给 `result.items` 属性,即可得到新的对象。
阅读全文