new Set不能对对象去重吗
时间: 2023-12-26 11:06:26 浏览: 58
`Set`是一种数据结构,用于存储一组不重复且无序的值(可以是任何类型的值),它通过哈希表实现。`Set`的去重是基于值的比较,而不是引用的比较。对于基本类型的值,它们的值相等就被视为相等;对于对象类型的值,需要引用相同才被视为相等。
因此,对于对象类型的值,如果它们引用不同,即使它们的属性完全相同,也会被视为不同的值。因此,使用`new Set()`对对象去重是无效的。
如果要对对象数组去重,可以使用`Array.prototype.filter()`结合`Array.prototype.findIndex()`方法实现。例如:
```javascript
const arr = [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}, {id: 1, name: 'foo'}];
const uniqueArr = arr.filter((item, index) => arr.findIndex(obj => JSON.stringify(obj) === JSON.stringify(item)) === index);
console.log(uniqueArr); // [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]
```
上述代码中,`JSON.stringify()`用于将对象序列化为字符串,以便进行比较。`Array.prototype.findIndex()`用于查找数组中第一个满足条件的元素的索引。`Array.prototype.filter()`用于根据条件筛选数组元素。
阅读全文