js数组去重也是老生常谈的话题了,怎么驱虫涅,最容易想到的就是直接新建一个数组,存放去重后的数组。由于NaN这种神奇的数字连他自己都不认识自己,所以目标数组如果需要去重NaN,需要用isNaN来判断一下,ok,码归正传,代码如下:
function unique01(arr){ if(Array.isArray(arr)){ var result = []; var flag = true; for(var i=0;i
这种方法虽然实现上没太大难度,缺点确实很明显,一是不够快,时间复杂度O(n)2。二是费空间,需要新开一个数组来存放结果。
怎么才能不费空间呢,直接在原数组上操作,最后返回这个数组,嗯,思路有了,就看如何实现了,继续放码..
function unique02(arr){ if(Array.isArray(arr)){ var flag = true; for(var i=arr.length-1;i>0;i--){ if(isNaN(arr[i])){ flag = false; } for(var j=0;j
仔细看看,这个操作还是有点水平的,虽然时间复杂度依然是O(n)2,起码空间不浪费了,当然,我们的目标不会止步于此的
function unique03(arr){ if(Array.isArray(arr)){ var result=[],obj={},val,type; for(var i=0;i
是不是更6了,没错,这次我们把时间复杂度降到了O(n),不过有点遗憾的是空间浪费的有点多,用空间的代价换取时间。究竟值不值呢,你说了算。
当然,没有最6,只有更6,ES6中的代码其实这样写
function unique04(arr) { return Array.from(new Set(arr))}
是的,你没有看错,只有一行,一行代码,搞定一切,就是这个feel。