let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];根据key值合并数据
时间: 2023-05-30 22:06:15 浏览: 84
可以使用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值是相同的,经过合并后,它们被合并到了同一个属性名下。
相关问题
let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];合并相同的可以
用reduce方法实现,遍历数组中的每个元素,如果已经在结果数组中存在相同的元素,则将其属性合并,否则将其添加到结果数组中。
代码如下:
```
let arr = [{a:'xinxin'}, {a:'pipi'}, {a:'zhazha'}, {a:'xinxin', c:1}];
let result = arr.reduce((acc, curr) => {
let existing = acc.find(item => item.a === curr.a);
if (existing) {
Object.assign(existing, curr);
} else {
acc.push(curr);
}
return acc;
}, []);
console.log(result);
```
输出结果为:
```
[{a: "xinxin", c: 1}, {a: "pipi"}, {a: "zhazha"}]
```
let arr = [ { a: "xinxin" }, { a: "pipi" }, { a: "zhazha" }, { a: "xinxin", c: 1 }, ];实现相同数据合并
可以使用reduce方法和Object.assign函数实现相同数据合并:
```
let arr = [
{ a: "xinxin" },
{ a: "pipi" },
{ a: "zhazha" },
{ a: "xinxin", c: 1 }
];
let result = Object.values(arr.reduce((acc, cur) => {
if (acc[cur.a]) {
Object.assign(acc[cur.a], cur);
} else {
acc[cur.a] = cur;
}
return acc;
}, {}));
console.log(result);
// Output: [{ a: "xinxin", c: 1 }, { a: "pipi" }, { a: "zhazha" }]
```
首先,使用reduce方法遍历数组,将每个元素合并到一个对象中。该对象的键为元素的"a"属性值,值为元素对象本身。如果遇到相同的"a"属性值,则使用Object.assign函数将其它属性合并到已存在的对象中。最后,使用Object.values函数将对象中的值转换为数组返回。
阅读全文