js陣列去重有哪些方法

2021-10-09 07:53:20 字數 2804 閱讀 4087

將陣列var arr = [1,1,『true』,『true』,true,true,15,15,false,false, undefined,undefined, null,null, nan, nan,『nan』, 0, 0, 『a』, 『a』,{},{}]中重複的值過濾掉

使用es6中的set是最簡單的去重方法

var arr  = [1,1,'true','true',true,true,15,15,false,false, undefined,

undefined, null,null, nan,nan,'nan', 0, 0, 'a', 'a',{},{}];

function arr_unique1(arr)

arr_unique1(arr); // (13)[1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", , ]

123456789

該方法可以說是最完美的方法,就是需要環境支援es6

建立乙個空map資料結構,遍歷需要去重的陣列,把陣列的每乙個元素作為key存到map中。由於map中不會出現相同的key值,所以最終得到的就是去重後的結果。

function arr_unique2(arr)  else 

} return array ;

} console.log(arr_unique2(arr)); //(13) [1, "a", "true", true, 15, false, 1, , null, nan, nan, "nan", 0, "a", , undefined]

123456789101112131415

function arr_unique3(arr) )

function loop(index)

loop(index - 1); //遞迴loop,然後陣列去重}}

loop(len-1);

return array;}

console.log(arr_unique3(arr)); //(14) [1, "a", "true", true, 15, false, 1, , null, nan, nan, "nan", 0, "a", , undefined]

1234567891011121314151617181920

function arr_unique4(arr)

});return res;

}console.log(arr_unique4(arr)); // (14) [1, "true", true, 15, false, undefined, null, nan, nan, "nan", 0, "a", , ]

1234567891011

該方法的不足之處在於無法對nan進行過濾,原因是var a = [1, nan , 2]; a.indexof(nan) === -1;,改善的方法是使用includes方法

function arr_unique5(arr));

}arr_unique5(arr); // (12) [1, "true", true, 15, false, undefined, null, "nan", 0, "a", , ]

1234567

美中不足的地方在於漏掉了nan,原因同方法四

function arr_unique6(arr)

});return res;

}arr_unique6(arr); // (13) [1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", , ]

12345678910

該方法也算是比較完美,沒有什麼遺漏的地方

function  arr_unique7(arr)

return prev;

} ,);

}arr_unique7(arr); // (13)[1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", , ]

123456789

function arr_unique8(arr)}}

return arr;

}arr_unique8(arr); // (14) [1, "true", true, 15, false, undefined, null, nan, nan, "nan", 0, "a", , ]

1234567891011

這是最麻煩的方法,效率十分低下,每乙個迴圈都會去動態獲取陣列的length。且該方法無法過濾掉nan,因為nan === nan的結果為false。

function arr_unique9(arr);

return arr.filter( (val)=>);

}arr_unique9(arr); // (12) [1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", ]

1234567

這種方法是終極版的,因為它可以進行陣列中的物件元素的去重!前面的幾種方法是不可以進行物件去重的。不過話說回來,js中的物件是本身就是乙個位址的引用,比如 {} == {} ;//false,兩者是兩個不同的物件,這裡我將其進行json.stringify進行簡化。

經親測,使用es6的set和map效率最高,reduce()和sort()效率還可以,雙層迴圈效率最低。

JS陣列去重有哪些方法?

檢索方法 方法名 功能描述 indexof 返回在陣列中可以找到給定值的第乙個索引,如果不存在,則返回 1 lastindexof 返回指定元素在陣列中的最後乙個的索引,如果不存在則返回 1 接下來我們通過乙個案例來演示陣列索引的使用。要求在一組資料中,去除重複的元素。其中陣列為 blue reen...

js陣列去重方法

var arr 1,2,3,4,5,1,2,3 function norepeat arr console.log norepeat arr 結果 1,2,3,4,5 arr.indexof val 這個方法會獲取val所在arr的下標 返回為 true 說明 獲取下標後和index下標對比如果 i...

JS陣列去重方法

var arr 1,2,1,2 定義乙個空陣列 var arr1 遍歷原始陣列,若新陣列中沒有這個元素,那麼就將該元素新增到新陣列中 for var i 0 i方法一 二維陣列中,是否可以用上面的方法呢?答案是否定的。js的indeof啊返回字串字元或陣列中某個元素的位置,它的內部是遍歷這個陣列看是...