問題:
一個(gè)數(shù)組中每一項(xiàng)都是對(duì)象,其中有兩三個(gè)對(duì)象是相同的,這個(gè)時(shí)候需要做到去重。要怎么做呢?
使用普通的去重方式:
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())
輸出結(jié)果:

輸出結(jié)果
原因:
可以看到是不行的,個(gè)人理解是因?yàn)閷?duì)象指向的是內(nèi)存地址,數(shù)組中的每一項(xiàng)雖然“看起來是一樣的”,但實(shí)際上是不一樣的,所以通過普通的方法進(jìn)行比較是行不通的。
解決:
方法1:Set結(jié)合Array.from
var a = [{a:'1'},{a:'1'},{b:'2'}];
var b = Array.from(new Set(a))

Set和Array.from

image.png
方法2:拓展運(yùn)算符結(jié)合Set
var c = [...new Set(a)]
console.log(c)

拓展運(yùn)算符結(jié)合Set