数组去重的10种方法

先定义一个数组

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];

一.利用ES6 Set去重

function unique (arr) {
     return Array.from(new Set(arr))
   }
  
   console.log(unique(arr))        //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]

二.利用for嵌套for,然后splice去重

function unique(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {         //第一个等同于第二个,splice方法删除第二个
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
console.log(unique(arr))   //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]

三.利用indexOf去重

function unique(arr) {
             var array = [];
       for (var i = 0; i < arr.length; i++) {
           if (array .indexOf(arr[i]) === -1) {
               array .push(arr[i])
           }
       }
       return array;
   }

四.利用sort()

function unique(arr) {
             arr = arr.sort()
       var arrry= [arr[0]];
       for (var i = 1; i < arr.length; i++) {
           if (arr[i] !== arr[i-1]) {
               arrry.push(arr[i]);
           }
       }
       return arrry;
   }

五.利用filter

function unique(arr) {
     return arr.filter(function(item, index, arr) {
       //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
       return arr.indexOf(item, 0) === index;
     });
   }

六.利用递归去重

function unique(arr) {
           var arrry= arr;
           var len = arrry.length;
       arrry.sort(function(a,b){   //排序后更加方便去重
           return a - b;
       })
       function loop(index){
           if(index >= 1){
               if(arrry[index] === arrry[index-1]){
                   arrry.splice(index,1);
               }
               loop(index - 1);    //递归loop,然后数组去重
           }
       }
       loop(len-1);
       return arrry;
   }

七.利用 Map 数据结构去重 

 function unique(arr) {
     let map = new Map();
     let array = new Array();  // 数组用于返回结果
     for (let i = 0; i < arr.length; i++) {
       if(map .has(arr[i])) {  // 如果有该key值
         map .set(arr[i], true);
       } else {
         map .set(arr[i], false);   // 如果没有该key值
         array .push(arr[i]);
       }
     }
     return array ;
   }

八.利用reduce

Array.prototype.unique = function unique() {
     var sortArr = this.sort();
     var array = [];
     sortArr.reduce((s1,s2) => {
       if(s1 !== s2){
         array .push(s1);
       }
       return s2;
     })
     array .push(sortArr[sortArr.length - 1]);
     return array ;
   }

九.利用includes

function unique(arr) {
var arrry = [];
for (vari = 0; i < arr.length; i++) {
if (!arrry.includes(arr[i])) {//includes 检测数组是否有某个值
arrry.push(arr[i]);
}
}
}

十.[...new Set(arr)]

这一种方法相对于第一种方法来说只是简化了代码

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

精彩评论
  • 2019-04-13 09:14:33

    博主写的文章真的技术很过硬,表示每天都会来支持

Top

分享: