js陣列去重方法總結
方法一:
雙層迴圈,外層迴圈元素,內層迴圈時比較值
如果有相同的值則跳過,不相同則push進陣列
function geta(arr) {
var arr2 = [];
for(var i = 0; i < arr.length; i++) {
for(var j = i + 1; j < arr.length; j++) {
if(arr[i] == arr[j]) {
j = ++i;
}
}
arr2.push(arr[i])
}
return arr2;
}
方法二:利用splice直接在原陣列進行操作
雙層迴圈,外層迴圈元素,內層迴圈時比較值
值相同時,則刪去這個值
注意點:刪除元素之後,需要將陣列的長度也減1.
function getb(arr) { var len = arr.length; for(var i = 0; i < len; i++) { for(var j = i + 1; j < len; j++) { if(arr[i] == arr[j]) { arr.splice(i, 1); //刪除已存在的元素 len--; //長度也要減去 j--; //從上一個重新開始 } } } return arr; }
優點:簡單易懂
缺點:佔用記憶體高,速度慢
方法三:利用物件的屬性不能相同的特點進行去重
function getc(arr) {
var obj = {};
var arr2 = [];
var len = arr.length;
for(var i = 0; i < len; i++) {
if(!obj[arr[i]]) { //如果能找到,證明陣列元素重複了
obj[arr[i]] = true;
arr2.push(arr[i]);
}
}
return arr2;
}
方法四:陣列遞迴去重
運用遞迴的思想
先排序,然後從最後開始比較,遇到相同,則刪除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
方法五:利用indexOf
function gete(arr) {
var arr2 = [];
for(var i = 0; i < arr.length; i++) {
if(arr2.indexOf(arr[i]) == -1) {
arr2.push(arr[i])
}
}
return arr2;
}
方法六:利用ES6的set
利用Array.from將Set結構轉換成陣列
1 2 3 4 |
|
拓展運算子(...)內部使用for...of迴圈
1 2 3 |
|
下面給大家補充介紹合併陣列並去重的方法
一、concat()方法
思路:concat() 方法將傳入的陣列或非陣列值與原數組合並,組成一個新的陣列並返回。該方法會產生一個新的陣列。
1 2 3 4 5 |
|
二、Array.prototype.push.apply()
思路:該方法優點是不會產生一個新的陣列。
1 2 3 4 5 6 7 8 9 10 |
|
總結:陣列方法去重有多種方法,但有好有壞,具體使用實現還得考慮考慮。