let arr = [{ a: "xinxin", b: "zhazha" }, { a: "xinxin", b: "zhazha", c: 1 } ];根据相同的key合并数据
时间: 2023-09-10 10:14:27 浏览: 39
如果要根据相同的key合并数据,可以使用reduce方法,将每个对象的key作为reduce的参数,然后将相同key的对象合并在一起,最后返回一个新的对象数组。
例如,如果要根据key "a" 合并上面的数组,可以这样写:
```
let result = arr.reduce((acc, cur) => {
let index = acc.findIndex(item => item.a === cur.a);
if(index === -1) {
acc.push(cur);
} else {
acc[index] = Object.assign(acc[index], cur);
}
return acc;
}, []);
```
这段代码中,reduce的初始值为一个空数组。在每次遍历数组时,使用findIndex方法查找是否已经有相同key的对象存在,如果不存在则将当前对象直接添加到数组中,如果存在则使用Object.assign方法将两个对象合并在一起,并替换原来的数组元素。最终返回合并后的对象数组。
相关问题
let arr = [ { a: "xinxin", b: "zhazha" }, { a: "xinxin", b: "zhazha", c: 1 }];使用reduce合并相同key
const merged = arr.reduce((acc, current) => {
const key = current.a;
if (!acc[key]) {
acc[key] = { a: key };
}
acc[key] = { ...acc[key], ...current };
return acc;
}, {});
const result = Object.values(merged);
console.log(result); // [{ a: "xinxin", b: "zhazha", c: 1 }]
let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];根据key值合并数据
可以使用reduce方法来合并数据,首先定义一个空对象作为初始值,然后遍历数组中的每一个对象,将其key值作为新对象的属性名,将其value值作为新对象的属性值,如果新对象已经存在该属性名,就将两个对象合并。
代码实现如下:
```
let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];
let mergedObj = arr.reduce((acc, cur) => {
let key = Object.keys(cur)[0];
if (key in acc) {
acc[key] = Object.assign(acc[key], cur);
} else {
acc[key] = cur;
}
return acc;
}, {});
console.log(mergedObj);
```
输出结果为:
```
{
a: {a: "xinxin", c: 1},
pipi: {a: "pipi"},
zhazha: {a: "zhazha"}
}
```
可以看到,原数组中有两个对象的key值是相同的,经过合并后,它们被合并到了同一个属性名下。