问题:
一个数组中每一项都是对象,其中有两三个对象是相同的,这个时候需要做到去重。要怎么做呢?
使用普通的去重方式:
var a = [{a:'1'},{a:'1'},{b:'2'}];
// 使用普通的方法去重
Array.prototype.unique1 = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(this[i]);
}
}
return res;
}
console.log(a.unique1())
输出结果:
原因:
可以看到是不行的,个人理解是因为对象指向的是内存地址,数组中的每一项虽然“看起来是一样的”,但实际上是不一样的,所以通过普通的方法进行比较是行不通的。
解决:
方法1:Set结合Array.from
var a = [{a:'1'},{a:'1'},{b:'2'}];
var b = Array.from(new Set(a))
方法2:拓展运算符结合Set
var c = [...new Set(a)]
console.log(c)