一个数组内有多个对象,将数组内对象中某个属性值相同的对象合并到一个数组,并返回变更后的数组
时间: 2024-01-09 15:41:48 浏览: 86
vue 对象数组中,根据相同属性的数据合并,重组新的数组对象
以下是一个示例实现:
```javascript
function mergeObjectsByProperty(arr, prop) {
const map = new Map();
arr.forEach(obj => {
const key = obj[prop];
if (map.has(key)) {
map.get(key).push(obj);
} else {
map.set(key, [obj]);
}
});
const result = [];
map.forEach(value => {
if (value.length > 1) {
const merged = Object.assign({}, ...value);
result.push(merged);
} else {
result.push(value[0]);
}
});
return result;
}
```
这个函数接受两个参数,一个是待处理的数组 `arr`,另一个是要合并的属性名 `prop`。它使用了一个 `Map` 对象来按照属性值将对象分组,并在每个组内将对象合并为一个新的对象。最后,将所有组合并后的对象放入一个新数组中返回。
例如,如果有以下数组:
```javascript
const arr = [
{ id: 1, name: 'Alice', age: 20 },
{ id: 2, name: 'Bob', age: 30 },
{ id: 3, name: 'Charlie', age: 20 },
{ id: 4, name: 'Dave', age: 30 }
];
```
我们可以按照年龄将对象合并:
```javascript
const result = mergeObjectsByProperty(arr, 'age');
console.log(result);
```
这将输出以下结果:
```javascript
[
{ id: 1, name: 'Alice', age: 20 },
{ id: 2, name: 'Bob', age: 30 }
]
```
注意,这里我们只合并了两组,因为只有两个年龄值。如果有更多的年龄值,它们也将被合并。如果没有任何两个对象在指定属性上具有相同的值,那么结果数组将与原数组相同。
阅读全文