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