js包含对象的数组去重
时间: 2024-09-25 12:17:33 浏览: 60
JavaScript中有多种方法可以对包含对象的数组进行去重,因为默认情况下,由于每个对象引用都是唯一的,即使它们的属性值完全相同,也视为不同的元素。以下是几种常见的去重技巧:
1. 使用`Set`数据结构:Set只允许存储唯一的值,因此将数组转换为Set,然后再转回数组即可实现去重。
```javascript
let arr = [{ id: 1 }, { id: 1 }, { id: 2 }];
let uniqueArr = [...new Set(arr)];
```
2. 利用JSON.stringify()序列化对象:这种方法适用于所有属性值都是基本类型的对象,通过比较字符串形式是否相同来进行去重。
```javascript
let arr = [{ id: 1 }, { id: 1 }, { id: 2 }];
let uniqueArr = arr.filter((item, index, self) => JSON.stringify(item) !== JSON.stringify(self[index - 1]));
```
注意,这种方法不适用于嵌套对象。
3. 自定义去重函数:如果对象有复杂结构,可以创建一个哈希表或者使用递归遍历对象的属性进行判断。
```javascript
function isDuplicate(obj, hash = new Map()) {
let key = JSON.stringify(obj);
return hash.has(key) ? true : (hash.set(key, obj), false);
}
let arr = [{ id: 1, name: 'a' }, { id: 1, name: 'b' }, { id: 2 }];
let uniqueArr = arr.filter(isDuplicate);
```
阅读全文
相关推荐


















