js陣列去重的多種方法

2021-10-07 22:29:04 字數 885 閱讀 4020

我總共想出了三種演算法來實現這個目的:
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表。這就是所謂的空間換時間。  就是這個測試頁面,你也可以去看看。
2023年10月7日更新:

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

array.prototype.unique4 = function()

}return re;

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

js 陣列去重多種方法

var arr 1,2,3,2,1,2,1,34,44 方法一 利用jquery unique var newarr unique arr 方法二 利用indexof去重 var newarr for var i 0 i if newarr.indexof arr i 1 return newarr...

JS陣列去重的多種方法

解決方案 1 依次拿出陣列中的每一項 排除最後一項,最後一項後面沒有需要比較的內容 2 和當前拿出項後面的每一項依次比較 3 如果發現有重複的,我們把找到的這個重複向在原有陣列中刪除掉 方案一 雙重for 迴圈 var ary 1,2,3,2,2,7,9,2,3,5,2,8 for var i 0 ...

js陣列去重的多種方法

1.雙層迴圈 function unique arr newarr.push arr i 若當前元素沒有重複的,將其追加到新陣列中 return newarr 返回新陣列 2.利用陣列的indexof下標屬性來查詢。判斷新陣列中是否存在當前元素如果沒有就加入 function unique arr ...