数组包对象 对象里的某个字段相同 另一个字段值相加 对象删除
时间: 2024-03-10 17:19:24 浏览: 22
可以通过以下步骤实现:
1. 遍历数组,将对象按照指定字段的值进行分组,可以使用 reduce 方法实现:
```
const groups = arr.reduce((acc, obj) => {
const key = obj.fieldName;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj);
return acc;
}, {});
```
2. 对于每个分组,将相同字段的值相加并更新对象,可以使用 forEach 方法实现:
```
Object.values(groups).forEach(group => {
const key = group[0].fieldName;
const sum = group.reduce((total, obj) => total + obj.value, 0);
const updatedObj = { ...group[0], value: sum };
// 替换原数组中的对象
arr = arr.filter(obj => obj.fieldName !== key).concat(updatedObj);
});
```
3. 将不需要的对象从数组中删除,可以使用 filter 方法实现:
```
arr = arr.filter(obj => obj.fieldName !== key);
```
完整代码示例:
```
const arr = [
{ fieldName: 'a', value: 1 },
{ fieldName: 'b', value: 2 },
{ fieldName: 'a', value: 3 },
{ fieldName: 'c', value: 4 },
];
const groups = arr.reduce((acc, obj) => {
const key = obj.fieldName;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj);
return acc;
}, {});
Object.values(groups).forEach(group => {
const key = group[0].fieldName;
const sum = group.reduce((total, obj) => total + obj.value, 0);
const updatedObj = { ...group[0], value: sum };
arr = arr.filter(obj => obj.fieldName !== key).concat(updatedObj);
});
arr = arr.filter(obj => obj.fieldName !== 'b');
console.log(arr);
// 输出:
// [
// { fieldName: 'a', value: 4 },
// { fieldName: 'c', value: 4 },
// ]
```