1.最簡單的就是ES6的實現(xiàn)
function unique(arr){ return [...new Set(arr)]; }
或者是
function unique(arr){ return Array.from(new Set(arr)); }
2.就是我之前最常用的,思想就是先新建一個數(shù)組temp,遍歷一下反粥,判斷這個新數(shù)組中有沒有當前這個值,沒有就push進去热监,最簡單數(shù)組去重法
function unique(array){
var temp = []; //一個新的臨時數(shù)組
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}
3.第三中的想法和第二種差不多,是通過遍歷來判斷當前這個值是不是在原數(shù)組里第一次出現(xiàn)践美,也就是說通過判斷這個元素的位置是不是等于當前的下標述寡,是那就是第一次出現(xiàn)啦,很簡單裳食。
function unique(array){
var temp = []; //一個新的臨時數(shù)組
for(var i = 0; i < array.length; i++){
if(array.indexOf(array[i]) === i){
temp.push(array[i]);
}
}
return temp;
}
4.第四種就是根據(jù)第三中的想法引申出來了的矛市,是通過filter函數(shù)來實現(xiàn)
function unique(array){
return array.filter( (element, index, self) => {
return self.indexOf( element ) === index;
});
}
5.對象鍵值法去重(這是我找的網(wǎng)上的芙沥,感覺挺好诲祸,雖然麻煩些)
/* * 速度最快, 占空間最多(空間換時間)
*
* 該方法執(zhí)行的速度比其他任何方法都快而昨, 就是占用的內存大一些救氯。
* 現(xiàn)思路:新建一js對象以及新數(shù)組,遍歷傳入數(shù)組時歌憨,判斷值是否為js對象的鍵着憨,
* 不是的話給對象新增該鍵并放入新數(shù)組。
* 注意點:判斷是否為js對象鍵時务嫡,會自動對傳入的鍵執(zhí)行“toString()”甲抖,
* 不同的鍵可能會被誤認為一樣漆改,例如n[val]-- n[1]、n["1"]准谚;
* 解決上述問題還是得調用“indexOf”挫剑。*/
function unique(array){
var temp = {}, r = [], len = array.length, val, type;
for (var i = 0; i < len; i++) {
val = array[i];
type = typeof val; if (!temp[val]) {
temp[val] = [type];
r.push(val);
} else if (temp[val].indexOf(type) < 0) {
temp[val].push(type);
r.push(val);
}
}
return r;
}
暫時先這樣,有好的我再繼續(xù)更新柱衔,哈哈
這里還有一個更全的鏈接樊破,請移步這里:他山之石