遇到复杂数组去重问题
之前一直使用的
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