常见数组去重带你在面试中飞起来

面试中js原生命中率特别高,其中数组又是重中之重,关于数组去重,总结了一下几种方法,仅供参考,欢迎批评指正


方法一:双重for循环(-)

 思路:构建一个新的数组存放结果。

 for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比。

 若结果数组中没有该元素,则存到结果数组中。

    var quChong =[-1,-2,1,1, 0,4,5,8,1,1,2,2,5,6,7];

    var qunew =[];

    function quC(){

      for(var i =0;i

          for(var j =i+1;j

            if(quChong[i]==quChong[j]){

                quChong.splice(j,1);

                j--;

            }

          }

      }

      return qunew;

  }

  re =quC();

console.log(re);

方法二:双重for循环(=)

  function qc(arr){           

  var arr1 = [];

    for(var i = 0;i

        for(var j = i+1;j

            if(arr[i]===arr[j]){

                ++i

            }

        }

    arr1.push(arr[i])

    }

      return arr1

  }

  console.log(qc(arr))

方法三:indexOf和push相结合重点

注意: indexOf低版本浏览器不支持

function quC(){

var arrf = [1,2,6,54,84,3,13,1,2,2];

var arrne = [];

for(var b = 0; b < arrf.length;b++){

if(arrne.indexOf(arrf[b]) == -1){

    // arrne.push(arrf[b]);//方法一:用push直接添加到新数组

    arrne.splice(1,0,arrf[b]);//方法二:用splice的添加功能,

    // 因为splice有删除和添加的功能,splice(0,0,arr[b])中0是从哪一项

    // 开始,第二个0是删除,不删除这一项就是0,arr[b]就是添加哪一项

}

}

return arrne;

}

re =quC();

console.log(re);

方法四:indexOf方法去重

var arr = [10,1,23,1,74,23,14,14,74];

Array.prototype.unique = function(){

    var temp = [];

    var len = this.length;//不写在循环内可以节省效率,只被访问一次

    for ( var i = 0; i < len;i++){

        if(temp.indexOf(this[i])== -1){

            temp.push(this[i]);

        }

    }

    return temp;

}

console.log(arr.unique());

 方法五:sort 方法

 思路:

 先将数组排序,一样的在一起,

  var一个新空数组,将原数组的第一位赋值到空数组中

将空数组中的末项与原数组中的i项相比较,(新数组末=新数组.length-1)

如果不一致将原数组的i元素push到新数组中

var arr =[1,2,3,2,1,3,5,1];

function unquin(arr){

    var sarr = arr.sort();//先将原数组排序

    var len = arr.length;//提高代码效率

    var narr = [sarr[0]]//将原数组的第1个元素添加到新数组中

    for(var i = 0;i

        if(narr[narr.length-1]!==sarr[i]){//判断新数组中最后一项若和原数组中值不相等

            narr.push(sarr[i]);//将不重复的值push到新数组中

        }

    }

    return narr;

}

console.log(unquin(arr));

方法六:对象数组去重

// 思路:

var一个空对象,和一个空数组

将工具封装到原型上,

   判断对象上有没有属性名为原数组下标为i的元素的属性名,

 没有将此元素作为该对象的一个属性名并赋一个不为false的值添加到该对象中

   同时将这个元素上添加到新数组中

var  arr =[1,1,2,2,2,4,6,4];

Array.prototype.unquin=function(){

   var obj = {};//创建空对象

   var len =this.length;//让长度等于指向的数组长度

   var narr = [];//创建空数组

   for(var i = 0;i < len;i++){

       if(!obj[this[i]]){//查看对象属性      

           obj[this[i]] = "a"//给对象的属性名赋一个不为false的值

           narr.push(this[i])//将元素添加大数组

       }

   }

   return narr;

}

console.log(arr.unquin());

以上是我根据之前使用过的方法总结的,当然去重并不是只有这几种方法,你可以去尝试一下其他方法

你可能感兴趣的:(常见数组去重带你在面试中飞起来)