JS實現陣列去重方法整理

2022-06-16 22:39:10 字數 2770 閱讀 2666

我們先來看下面的例子,當然**與網路,位址《刪除陣列中多個不連續的陣列元素的正確姿勢》

我們現在將陣列中所有的『 a』 元素刪除:

var arr = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'e', 'g', 'a', 'f'];

arr.foreach(function(value, index) )

console.log(arr);

//["a", "b", "c", "d", "a", "e", "g", "f"]

只要相鄰的『 a』 元素, 都沒被刪除, splice不但可以刪除元素本身, 還同時可以減少陣列長度( 就是抹去一切痕跡),

這樣導致後續的陣列元素會代替已經刪除的元素的位置, 但是迴圈是按照陣列的下標按順序刪除, 這樣就會漏掉遷移的元素。

看到網上有網友在說使用delete進行操作,如下:

var arr = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'e', 'g', 'a', 'f'];

arr.foreach(

function

(value, index) )

console.log(arr);

//[2: "b", 3: "c", 4: "d", 7: "e", 8: "g", 10: "f"]

但是得到的arr其實是乙個非常規的陣列了,也就是說其實delete主要是用於對物件屬性的操作。這確實要根據自己的需求來了。

當然簡單的實現如下:

var arr = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'e', 'g', 'a', 'f'];

var newarr = arr.filter(function

(key) )

console.log(newarr);

//["b", "c", "d", "e", "g", "f"]

下面總結下常用實現方式。

let arr1 = array.from(new array(100000),(item,index) =>)

let arr2 = array.from(new array(50000),(item,index) =>)

function

distinct(a,b)

console.time('去重計算時間');

console.log('去重後的長度', distinct(arr1, arr2).length);

console.timeend('去重計算時間');

上面建立了兩個陣列長度,1個10w,1個5w長度的陣列,合併到乙個陣列,然後進行去重,驗證下去重的計算時間是多長。

function

distinct(a,b) )

}

思路就是es6 中的 array.filter() 遍歷陣列,並結合 indexof 來排除重複項。看下結果:

從截圖可以看出,計算時間花費了19753ms的時間。

function

distinct(a,b)

return

result

}

這種方式跟array.filter() + indexof實現思路差不多,結果如圖所示:

從圖上可以看出,計算的時間跟array.filter() + indexof的時間差不多。

function

distinct(a, b) }}

return

arr}

優點:簡單易懂

缺點:占用記憶體高,速度慢

看下結果:

首先使用 sort() 將陣列進行排序

然後比較相鄰元素是否相等,從而排除重複項。

function

distinct(a, b) )

let result = [arr[0]]

for (let i=1, len=arr.length; i)

return

result

}

從上面**可以看出來,做了一次排序和一次迴圈,所以效率比前面都高,結果如圖所示:

可以看出,結果只花了255ms左右時間。

利用物件的屬性不能相同的特點進行去重,**如下:

function

distinct(a, b)

for(let i of arr)

}return

result

}

執行結果如圖所示:

結果只花費了43ms左右時間。

function

distinct(a, b)

set資料結構,它類似於陣列,其成員的值都是唯一的。

利用array.from將set結構轉換成陣列。

結果如圖所示:

從結果看出來該方法執行只花了151ms左右的時間。

從上面幾種方法得出如下結論:

附錄中新增瀏覽器array物件支援indexof和foreach的polyfill:

array.prototype.indexof = array.prototype.indexof || function

(item)

}return -1;

}array.prototype.foreach = array.prototype.foreach || function

(callback, thisarg)

}

JS基礎篇 JS實現陣列去重方法整理

我們先來看下面的例子,當然 與網路,位址 刪除陣列中多個不連續的陣列元素的正確姿勢 我們現在將陣列中所有的 a 元素刪除 var arr a a b c d a a e g a f arr.foreach function value,index console.log arr a b c d a ...

陣列去重方法整理

陣列去重看似乙個簡單的問題,隨著我們的學習,對於新知識的掌握這個曾經困著我們的問題逐漸變得游刃有餘。要去重,中心解決辦法就是比較該陣列中是否重複的元素,而後將重複的元素去掉。以下帶來幾個樓主折磨自己中研究出的一點方法 for迴圈法 思路 將陣列中的每乙個數與陣列中其他的數進行比較,看是否有相同的。如...

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...