JS中陣列去重問題

2021-08-04 05:33:36 字數 925 閱讀 6849

js中陣列去重問題

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

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陣列去重問題

1.雙層迴圈 外層迴圈,內層比較值 1 利用splice直接在原陣列進行操作 array.prototype.delrepeat function return arr var a 1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1 console.log a.delrepeat 1...

js中陣列去重

js中的陣列去重 1.建立乙個新陣列,把陣列中的每乙個元素插入到新陣列中 2.遍歷原陣列中每乙個元素分別和新陣列中的每乙個元素進行比較 第一種去重方法 原陣列 var arr 1 2,5 41,1 2,1 4,5 8,10 新陣列 var t t 0 arr 0 arr中的每乙個元素 for var...

JS陣列去重,物件去重

例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...