数组去重方法

var myArr = [4,4,5,5,6,6,1,1,2,2,3,3,7,7]
//1,2,3类似,都是利用双层循环,方法1,2都是新建数组,返回新数组,方法3则是直接操作原数组,相对占用内存高
function unique1(arr){   var result = [arr[0]];   for(var i=1;i<arr.length;i++){     var repeat = false;     for(var j=0;j<result.length;j++){       if(arr[i] == result[j]){         repeat = true;         break;       }     }     if(!repeat){ result.push(arr[i]);     }   }   return result; }; function unique2(arr){ var result = [], i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] === arr[j]){ j = ++i; } } result.push(arr[i]); } return result; }; function unique3(arr){ var i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] == arr[j]){ arr.splice(j,1); len--; j--; } } } return arr; }; // 利用对象属性 function unique4(arr){ var i, obj = {}, result = [], len = arr.length; for(i = 0; i< arr.length; i++){ if(!obj[arr[i]]){ obj[arr[i]] = 1; result.push(arr[i]); } } return result; }; // 排序后递归 function unique5(arr){ var len = arr.length; arr.sort(function(a,b){ return a - b; }) function loop(index){ if(index >= 1){ if(arr[index] === arr[index-1]){ arr.splice(index,1); } loop(index - 1); } } loop(len-1); return arr; }; // forEach+indexOf function unique6(arr){ var result = [], len = arr.length; arr.forEach(function(v, i ,arr){ var bool = arr.indexOf(v,i+1); if(bool === -1){ result.push(v); } }) return result; }; // es6 set function unique7(arr){ return Array.from(new Set(arr)); }; console.log(unique1(myArr)) console.log(unique2(myArr)) console.log(unique3(myArr)) console.log(unique4(myArr)) console.log(unique5(myArr)) console.log(unique6(myArr)) console.log(unique7(myArr))

如有表述不准确之处,欢迎指正,欢迎补充,感谢阅读。

原文地址:https://www.cnblogs.com/wangzhenyu666/p/8397474.html