arr=[a:{aa:"123",bb:""},b:"456",bb:""},a:{aa:"",bb:"456"}] 去重,内容且合并
时间: 2023-09-01 21:12:50 浏览: 56
首先,该数组中存在语法错误,正确的格式应该是:
```
arr=[
{a:{aa:"123",bb:""},b:"456",bb:""},
{a:{aa:"",bb:"456"}}
]
```
接下来,我们可以使用 Set 和 Object.assign() 方法来实现数组去重和内容合并:
```javascript
const uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
const mergedObj = uniqueArr.reduce((prev, curr) => Object.assign(prev, curr), {});
console.log(mergedObj);
// 输出结果:{ a: { aa: '123', bb: '456' }, b: '456', bb: '' }
```
解释一下上面的代码:
- `arr.map(JSON.stringify)` 将原数组中的每个对象转换为字符串。
- `new Set()` 创建一个 Set 对象,去除重复的字符串。
- `Array.from()` 将 Set 对象转换为数组。
- `map(JSON.parse)` 将数组中的每个字符串转换为对象,得到去重后的数组 `uniqueArr`。
- `reduce()` 方法遍历 `uniqueArr` 数组,将每个对象合并到一个新的对象中,得到内容合并后的对象 `mergedObj`。
注意:上面合并后的对象中,键名相同的属性会被合并到一个属性中,但是属性值不同的情况下,后面的属性值会覆盖前面的属性值。
阅读全文