學(xué)習(xí)了ES6之后翅睛,接觸了2種更為簡潔的方法
方法一:
functionunique1(arr) {
//定義常量 res,值為一個(gè)Map對象實(shí)例
constres=newMap();
//返回arr數(shù)組過濾后的結(jié)果鸣峭,結(jié)果為一個(gè)數(shù)組
//過濾條件是酥艳,如果res中沒有某個(gè)鍵爬骤,就設(shè)置這個(gè)鍵的值為1
returnarr.filter((a) => !res.has(a) &&res.set(a,1))
}
這個(gè)方法主要是利用了ES6的Map數(shù)據(jù)結(jié)構(gòu)的特性和數(shù)組的filter()方法。
方法二:
functionunique2(arr) {
//通過Set對象霞玄,對數(shù)組去重,結(jié)果又返回一個(gè)Set對象
//通過from方法惰爬,將Set對象轉(zhuǎn)為數(shù)組
returnArray.from(newSet(arr));
}
這個(gè)方法主要是利用了ES6的Set數(shù)據(jù)結(jié)構(gòu)和數(shù)組的from()方法惫企。
甚至還可以這么寫......
...new Set(array)
這些都是ES6的新特性帶來的簡潔。
還有一種是利用includes()方法實(shí)現(xiàn):
方法三:
functionunique3(arr) {
letnewarr= [];
for(leti=0;i
if(!newarr.includes(arr[i])){
newarr.push(arr[i]);
}
}
returnnewarr;
}
很好懂丛版,不作解釋。
利用json實(shí)現(xiàn)數(shù)組去重
方法四:
Array.prototype.unique=function() {
letkey= {};? ?//利用json鍵值唯一的原理實(shí)現(xiàn)去重
letnewarr= [];??//存放新的不重復(fù)的數(shù)組
letlen=this.length;? ?//記錄重復(fù)數(shù)組的長度页畦,提升性能
for(leti=0;i
lett=this[i];
if(key[t] ||t===undefined)continue;? ?
? ? ? ? ? ?//json的鍵值不重復(fù)研儒,唯一
????????????假如 key[1]存在的話,也就說明好芭,1已經(jīng)存在不重復(fù)的數(shù)組中了。
????????????如果key里面存在的話跳出本次循環(huán)
key[t] =t;
? ? ? ?//給key賦值栓撞,賦值后碗硬,下次if判斷的時(shí)候就會跳過,就不會再賦值恩尾,這就實(shí)現(xiàn)了去重。
? ? ? ?只有key里面不存在的時(shí)候才會添加到新的數(shù)組中木人。
newarr.push(t);
}
returnnewarr;
};
當(dāng)然還有很多方法,歡迎討論醒第。