复杂数组去重

遇到复杂数组去重问题

之前一直使用的

this.list = [...new Set(this.list)]

不管用了,具体原因,待解。

 

发现一个很好用的方法

// 复杂数组去重
removeDuplicates(arr){
let obj = {}
return arr.filter((item, index) => {
// 防止key重复
let newItem = item + JSON.stringify(item)
return obj.hasOwnProperty(newItem) ? false : obj[newItem] = true
})
},

知识点:
hasOwnProperty:判断 obj中有无newItem这个属性。
返回值为布尔值。
只能找到自身属性,继承属性为false
需要注意一点,js并没有保护hasOwnProperty。意味着如果提前把hasOwnProperty值设为false或true
得到的结论并不准确。如果担心这种情况,1.可以直接使用原型链上真正的 hasOwnProperty 方法
2.使用另一个对象的`hasOwnProperty` 并且call
({}).hasOwnProperty.call(foo, 'bar'); // true
3.也可以使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true


 
上一篇:JS浅拷贝与深拷贝实现方式


下一篇:class -类的实例