陣列去重的方法

2021-07-22 06:30:40 字數 887 閱讀 3083

我總共想出了三種演算法來實現這個目的:

array.prototype.unique1 = function()

return n;

}

array.prototype.unique2 = function()

,r=; //n為hash表,r為臨時陣列

for(var i = 0; i < this.length; i++) //遍歷當前陣列 }

return r;

}

array.prototype.unique3 = function()

return n;

}

其中第1種和第3種方法都用到了陣列的indexof方法。此方法的目的是尋找存入引數在陣列中第一次出現的位置。很顯然,js引擎在實現這個方法的時候會遍歷陣列直到找到目標為止。所以此函式會浪費掉很多時間。 而第2中方法用的是hash表。把已經出現過的通過下標的形式存入乙個object內。下標的引用要比用indexof搜尋陣列快的多。

為了判斷這三種方法的效率如何,我做了乙個測試程式,生成乙個10000長度的隨機數組成的陣列,然後分別用幾個方法來測試執行時間。 結果表明第二種方法遠遠快於其他兩種方法。 但是記憶體占用方面應該第二種方法比較多,因為多了乙個hash表。這就是所謂的空間換時間。  就是這個測試頁面,你也可以去看看。

根據hpl大牛的思路,我寫了第四種方法:

array.prototype.unique4 = function()

} return re;

}

這個方法的思路是先把陣列排序,然後比較相鄰的兩個值。 排序的時候用的js原生的sort方法,js引擎內部應該是用的快速排序吧。 最終測試的結果是此方法執行時間平均是第二種方法的三倍左右,不過比第一種和第三種方法快了不少。

陣列去重方法

1 es6提供了新的資料結構set,它類似於陣列,但是成員的值是唯一的,沒有重複的值。let arr 1,2,5,2,3,4,1,2,3,5,4,1,2,3,2,1,1,1,asd 123 123 123 asd 1,true,true,false console.log new set arr 或...

陣列去重方法

雙迴圈去重 雙重 for 或 while 迴圈是比較笨拙的方法,它的實現原理很簡單 先定義乙個包含原始陣列第乙個元素的陣列,然後遍歷原始陣列,將原始陣列中的每個元素與新陣列的每個元素進行比較,如果不重複則新增到新的陣列中,最後返回新的陣列,其缺點是如果陣列長度很長,那麼將會非常消耗記憶體 funct...

陣列去重方法

1.使用原生的filter和indexof來進行過濾和篩選。var filtered data.filter function item,index 複製 使用filter的第三個引數繫結this的值 var filtered2 data.filter function item,index,sel...