按照效率低到高
- for循环
function uniq1(arr){ for(let i=0,len=arr.length; i<len;i++){ for (let j=0;j<len;j++){ if (arr[i] == arr[j]){ arr.splice(j,1); len--; j--; } } } return arr }
-
for 和 while
function uniq6(arr){ if(arr === null || arr.length < 2){ return arr }; let res = [], exits =[]; for (let i = 0 ,len = arr.length;i<len;i++){ let j = arr[i]; while( !exits[j]){ res.push(arr[i]); exits[j]=true; } } return res; }
-
ES6 的 filter()方法
function uniq2(arr){ return arr.filter((item,index)=>{ return arr.indexOf(item) === index }) }
-
for ... of
function uniq3(arr){ let result = []; for (let i of arr){ !result.includes(i) && result.push(i); } return result }
-
sort方法
function uniq4(arr){ arr = arr.sort(); let result = [arr[0]]; for (let i= 1,len =arr.length;i<len;i++){ arr[i] !== arr[i-1] && result.push(arr[i]) } return result }
-
hash
function unique3(arr){ for (var i =0,hash=[];i<arr.length ;i++ ){ if (hash[arr[i]]==undefined){ hash[arr[i]]=1; } } var j=0; var keys=[]; for (keys[i++] in hash ); return keys; } console.log( unique3(arr) );
-
Es6 的 set方法
function uniq5(arr){ return Array.from(new Set([arr])) }