1.最簡(jiǎn)單的就是ES6的實(shí)現(xiàn)
function unique(arr){ return [...new Set(arr)]; }
或者是
function unique(arr){ return Array.from(new Set(arr)); }
2.就是我之前最常用的,思想就是先新建一個(gè)數(shù)組temp,遍歷一下,判斷這個(gè)新數(shù)組中有沒有當(dāng)前這個(gè)值,沒有就push進(jìn)去,最簡(jiǎn)單數(shù)組去重法
function unique(array){
var temp = []; //一個(gè)新的臨時(shí)數(shù)組
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}
3.第三中的想法和第二種差不多,是通過遍歷來判斷當(dāng)前這個(gè)值是不是在原數(shù)組里第一次出現(xiàn),也就是說通過判斷這個(gè)元素的位置是不是等于當(dāng)前的下標(biāo),是那就是第一次出現(xiàn)啦,很簡(jiǎn)單。
function unique(array){
var temp = []; //一個(gè)新的臨時(shí)數(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ù)來實(shí)現(xiàn)
function unique(array){
return array.filter( (element, index, self) => {
return self.indexOf( element ) === index;
});
}
5.對(duì)象鍵值法去重(這是我找的網(wǎng)上的,感覺挺好,雖然麻煩些)
/* * 速度最快, 占空間最多(空間換時(shí)間)
*
* 該方法執(zhí)行的速度比其他任何方法都快, 就是占用的內(nèi)存大一些。
* 現(xiàn)思路:新建一js對(duì)象以及新數(shù)組,遍歷傳入數(shù)組時(shí),判斷值是否為js對(duì)象的鍵,
* 不是的話給對(duì)象新增該鍵并放入新數(shù)組。
* 注意點(diǎn):判斷是否為js對(duì)象鍵時(shí),會(huì)自動(dòng)對(duì)傳入的鍵執(zhí)行“toString()”,
* 不同的鍵可能會(huì)被誤認(rèn)為一樣,例如n[val]-- n[1]、n["1"];
* 解決上述問題還是得調(diào)用“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;
}
暫時(shí)先這樣,有好的我再繼續(xù)更新,哈哈
這里還有一個(gè)更全的鏈接,請(qǐng)移步這里:他山之石