我們先來看下面的例子,當然**與網路,位址《刪除陣列中多個不連續的陣列元素的正確姿勢》
我們現在將陣列中所有的『 a』 元素刪除:
var arr = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'e', 'g', 'a', 'f'];只要相鄰的『 a』 元素, 都沒被刪除, splice不但可以刪除元素本身, 還同時可以減少陣列長度( 就是抹去一切痕跡),arr.foreach(function(value, index) )
console.log(arr);
//["a", "b", "c", "d", "a", "e", "g", "f"]
這樣導致後續的陣列元素會代替已經刪除的元素的位置, 但是迴圈是按照陣列的下標按順序刪除, 這樣就會漏掉遷移的元素。
看到網上有網友在說使用delete進行操作,如下:
var arr = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'e', 'g', 'a', 'f'];但是得到的arr其實是乙個非常規的陣列了,也就是說其實delete主要是用於對物件屬性的操作。這確實要根據自己的需求來了。arr.foreach(
function
(value, index) )
console.log(arr);
//[2: "b", 3: "c", 4: "d", 7: "e", 8: "g", 10: "f"]
當然簡單的實現如下:
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) =>)上面建立了兩個陣列長度,1個10w,1個5w長度的陣列,合併到乙個陣列,然後進行去重,驗證下去重的計算時間是多長。let arr2 = array.from(new array(50000),(item,index) =>)
function
distinct(a,b)
console.time('去重計算時間');
console.log('去重後的長度', distinct(arr1, arr2).length);
console.timeend('去重計算時間');
function思路就是es6 中的 array.filter() 遍歷陣列,並結合 indexof 來排除重複項。看下結果:distinct(a,b) )
}
從截圖可以看出,計算時間花費了19753ms的時間。
function這種方式跟array.filter() + indexof實現思路差不多,結果如圖所示:distinct(a,b)
return
result
}
從圖上可以看出,計算的時間跟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左右時間。
functionset資料結構,它類似於陣列,其成員的值都是唯一的。distinct(a, b)
利用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...