把对象中多个数组对象相同id的value相加生成原来结构的数据
时间: 2024-04-29 10:23:26 浏览: 87
假设原始数据结构如下:
```javascript
const data = {
items: [
{ id: 1, value: 10 },
{ id: 2, value: 15 },
{ id: 3, value: 20 },
{ id: 1, value: 5 },
{ id: 3, value: 10 },
{ id: 2, value: 5 },
{ id: 4, value: 30 }
]
};
```
我们需要将 `id` 相同的对象的 `value` 相加,生成原来结构的数据。
可以使用 `reduce` 方法来实现:
```javascript
const result = data.items.reduce((acc, curr) => {
if (acc[curr.id]) {
acc[curr.id].value += curr.value;
} else {
acc[curr.id] = curr;
}
return acc;
}, {});
const output = {
items: Object.values(result)
};
```
这里我们使用一个对象 `acc` 作为累加器,遍历原始数据的每一个对象 `curr`,如果当前对象的 `id` 已经在累加器中存在,就将其 `value` 相加;否则,将当前对象添加到累加器中。最终,我们将累加器中的值转换为一个数组,生成原来结构的数据。
相关问题
把对象中多个数组对象id相同的value相加,生成原来结构的新数组
假设有一个对象数组arr,每个对象中有一个id属性和一个value属性,现在需要对id相同的value进行求和,并返回一个新的对象数组。可以按照以下步骤实现:
1. 定义一个空对象newObj,用于存储求和后的结果。
2. 遍历原数组arr,对于每个对象,判断其id属性是否已经在newObj中存在。
- 如果不存在,则在newObj中添加一个新的属性,属性名为该对象的id,属性值为该对象的value。
- 如果已经存在,则将该对象的value与newObj中已有属性的值相加,更新newObj中该属性的值。
3. 将newObj中的属性转换为对象数组,返回结果。
以下是示例代码实现:
```javascript
function sumArrayObjects(arr) {
let newObj = {};
for (let obj of arr) {
let id = obj.id;
let value = obj.value;
if (!newObj[id]) {
newObj[id] = value;
} else {
newObj[id] += value;
}
}
let newArray = Object.keys(newObj).map(id => ({id, value: newObj[id]}));
return newArray;
}
```
使用示例:
```javascript
let arr = [
{id: 'a', value: 1},
{id: 'b', value: 2},
{id: 'a', value: 3},
{id: 'c', value: 4},
{id: 'b', value: 5}
];
let newArray = sumArrayObjects(arr);
console.log(newArray);
// [{id: 'a', value: 4}, {id: 'b', value: 7}, {id: 'c', value: 4}]
```
把对象中多个数组对象中相同id的value值相加,生成原来结构的数据
假设有以下对象:
```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 }
]
}
```
阅读全文