let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];合并相同的key
时间: 2023-05-30 20:06:14 浏览: 114
C.rar_site:www.pudn.com
可以使用reduce方法和Object.keys方法来合并相同的key,具体步骤如下:
1. 使用reduce方法遍历数组,将每个对象的key和value存储到一个新的对象中;
2. 使用Object.keys方法获取新对象的所有key,遍历这些key;
3. 对每个key,使用filter方法获取所有具有该key的对象;
4. 将这些对象的value合并成一个数组,并将这个数组赋值给新对象中对应的key。
以下是完整的代码实现:
```
let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];
let merged = arr.reduce((acc, cur) => {
Object.entries(cur).forEach(([key, value]) => {
acc[key] = acc[key] || [];
acc[key].push(value);
});
return acc;
}, {});
Object.keys(merged).forEach(key => {
let values = merged[key];
if (values.length > 1) {
merged[key] = values.filter(value => value !== undefined);
} else {
merged[key] = values[0];
}
});
console.log(merged);
// Output: {a: ['xinxin', 'pipi', 'zhazha'], c: 1}
```
在上面的代码中,我们首先使用reduce方法将数组中的所有对象合并为一个新对象merged。在这个过程中,我们使用Object.entries方法遍历每个对象的所有key和value,并将它们存储到merged对象中。由于可能存在相同的key,我们将每个key的value存储为一个数组。
接下来,我们使用Object.keys方法获取merged对象的所有key,并遍历这些key。对于每个key,我们使用filter方法获取所有具有这个key的对象,并将它们的value合并成一个数组。由于数组中可能存在undefined值,我们使用filter方法将它们过滤掉。最后,如果这个key的value只有一个元素,我们将这个元素赋值给merged对象的对应key;否则,我们将这个key的value赋值为一个数组。
最终,我们得到了一个合并了相同key的新对象merged。
阅读全文