js陣列去重也是老生常談的話題了,怎麼驅蟲涅,最容易想到的就是直接新建乙個陣列,存放去重後的陣列。由於nan這種神奇的數字連他自己都不認識自己,所以目標陣列如果需要去重nan,需要用isnan來判斷一下,ok,碼歸正傳,**如下:
function unique01(arr)else
if(isnan(arr[i]))
else}}
return
result;
}else
}
這種方法雖然實現上沒太大難度,缺點確實很明顯,一是不夠快,時間複雜度o(n)2。二是費空間,需要新開乙個陣列來存放結果。
怎麼才能不費空間呢,直接在原陣列上操作,最後返回這個陣列,嗯,思路有了,就看如何實現了,繼續放碼..
functionunique02(arr)
for(var j=0;j)
else
if(arr[j]===arr[i])}}
return
arr;
}else
}
仔細看看,這個操作還是有點水平的,雖然時間複雜度依然是o(n)2,起碼空間不浪費了,當然,我們的目標不會止步於此的
functionunique03(arr),val,type;
for(var i=0;i)
else
if(obj[val].indexof(type)==-1)
}return
result;
}else
}
是不是更6了,沒錯,這次我們把時間複雜度降到了o(n),不過有點遺憾的是空間浪費的有點多,用空間的代價換取時間。究竟值不值呢,你說了算。
當然,沒有最6,只有更6,es6中的**其實這樣寫
functionunique04(arr)
是的,你沒有看錯,只有一行,一行**,搞定一切,就是這個feel。
JS陣列去重,物件去重
例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...
js 陣列去重
function unique arr if isrepeated return result 建立乙個新的陣列,迴圈原有的陣列,每取乙個數就迴圈判斷新建的陣列中是否有和這個相等的值,沒有則插入。方法簡單,但是有雙重迴圈,陣列大了之後效率低。所以能一次迴圈解決最好。var str new array...
JS 陣列去重
我總共想出了三種演算法來實現這個目的 array.prototype.unique1 function return n array.prototype.unique2 function r n為hash表,r為臨時陣列 for var i 0 i this.length i 遍歷當前陣列 retu...