兩種陣列去重方法比較
阿新 • • 發佈:2019-02-19
通過indexOf和lastIndexOf來判斷是否唯一
是我今天看JS權威指南時候突然想到的,用indexOf和lastIndexOf來判斷是否唯一,如果不唯一則將重複項刪去,然後繼續判斷,實現如下
function unique(arr){
for(let i=0,len=arr.length;i<len;i++){
while(i!==arr.lastIndexOf(arr[i])){
// 如果不唯一,則把後面重複的一位去掉
arr.splice(arr.lastIndexOf(arr[i]),1)
len --
}
}
return arr
}
經過改進之後,將註釋那行換成下面這樣
arr.splice(arr.indexOf(arr[i]),1)
這樣直接將前面的重複項去掉,而自動將i向前推進一位,效率高了將近1/3
第二種
這種是相當有創意的一種快速去重方法
function unique2(arr){
var newArr = []
for(let i=0,len=arr.length;i<len;i++){
for(let j=i+1;j<len;j++){
// 如果重複,則i向前推進,但不管重複項
if(arr[i]==arr[j]) j = ++i
}
// 將沒有重複項的推入到新陣列
newArr.push(arr[i])
}
return newArr
}
實驗結果
各自去重了一百萬次,未改進前,第二種是第一種的3倍,改進之後第二種是第一種的2倍,效率高得可怕,但第一種的排序是直接建立在原陣列之上,第二種則重新建立了一個數組,記憶體佔用方面還是略有差別,所以還是分情況分別適用。