zoukankan      html  css  js  c++  java
  • 数组去重方法总结

    总结下javascript中常见的数组去重方法,面试中也经常会遇到这个问题。引申的还有合并数组并去重。

    方法一:遍历数组

    思路:新建一数组,遍历传入数组,若元素不在新数组中就添加到新数组中。

    注意:判断值是否在数组的方法“indexOf”是ECMAScript5方法,IE8以下不支持,需多写兼容低版本浏览器代码。 

     1 //判断浏览器是否支持indexOf方法
     2      if(!Array.prototype.indexOf){
     3          //新增indexOf方法
     4          Array.prototype.indexOf = function(item){
     5              var result = -1,
     6                  arr_item = null;
     7              if(this.length == 0) {
     8                  return result;
     9              }
    10              for(var i=0,len=this.length; i<len; i++){
    11                  arr_item = this[i];
    12                  if(arr_item === item){
    13                      result = i;
    14                      break; 
    15                  }
    16              }
    17              return result;
    18          };
    19      }
    20     
    1 function unique1(arr){
    2     var newArr = [];//新建一个数组
    3     for(var i=0,len=arr.length;i<len;i++){
    4         if(newArr.indexOf(arr[i]) == -1){//若新数组中未包含该项则将其存入新数组
    5          newArr.push(arr[i]);
    6      }
    7     }
    8     return newArr;
    9 }    

    方法二:数组下标去重法

    思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入结果数组。

    注意:此方法也用到了“indexOf”方法。

    1 function unique2(arr){
    2     var newArr = [];
    3     for(var i=0, len=arr.length; i<len; i++){
    4          if(arr.indexOf(arr[i]) == i){
    5              newArr.push(arr[i]);
    6          }
    7      }
    8      return newArr;
    9 }

    方法三:排序后相邻去重法

    思路:将传入的数组进行排序,相同的元素就会相邻。再遍历数组,将元素与新数组的最后一个值进行比较,若不同则加入新数组。

     1 function unique3(arr){
     2      arr.sort();
     3      var newArr = [arr[0]];
     4      for(var i=1, len=arr.length; i<len; i++){
     5          if(arr[i] !== newArr[newArr.length-1]){
     6              newArr.push(arr[i]);
     7             }
     8      }
     9      return newArr;
    10 }

    方法四:优化遍历数组法

    思路:遍历传入的数组,元素与右边的元素依次比较,若元素有重复,则结束当前的元素比较,将下一个元素当做比较对象,即跳出内层循环。

     1 function unique4(arr){
     2      var newArr = [];
     3      for(var i=0,len=arr.length; i<len;i++){
     4          for(var j=i+1;j<len;j++){
     5              if(arr[i] === arr[j]){//获取没重复的最右一值放入新数组
     6                  ++i;
     7              }                 
     8          }
     9          newArr.push(arr[i]);
    10      }
    11      return newArr;
    12 }

    引申:合并数组并去重

    一、concat()方法

    思路:concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回。该方法会产生一个新的数组。

    function concatArr(arr1, arr2){
        var arr = arr1.concat(arr2);
        arr = unique1(arr);//再引用上面的任意一个去重方法
        return arr;
    }

    二、Array.prototype.push.apply()

    思路:该方法优点是不会产生一个新的数组。

    1 var a = [1, 2, 3];
    2 var b = [4, 5, 6];
    3 
    4 Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]
    5 //等效于:a.push.apply(a, b);
    6 //也等效于[].push.apply(a, b); 
    1 function concatArray(arr1,arr2){
    2     Array.prototype.push.apply(arr1, arr2);
    3     arr1 = unique1(arr1);
    4     return arr1;
    5 }
  • 相关阅读:
    strtok() and strtod()
    quernation,euler,rotationmatrix之间的相互转换
    Ubuntu16.04+Ros+Usb_Cam ORB SLAM2
    windows10下VS2013搭建opencv2.4.9吐血之作
    深度学习之numpy.poly1d()函数
    matplotlib动态图subplots()和subplot()不同及参数
    python学习之matplotlib绘制动图(FuncAnimation()参数)
    javascipt——jQuery
    Javascript——(2)DOM
    linux nc 命令详解
  • 原文地址:https://www.cnblogs.com/yangmin01/p/5893834.html
Copyright © 2011-2022 走看看