• 数组去重


    主推最简方法(使用removeRepeat方法)如下:

    1.ES5中写法:

    function removeRepeat (arr) {
         var newArr = [];
         for (var i=0; i<arr.length; i++) {
                if ( newArr.indexOf(arr[i])==-1 ) {
                      newArr.push( arr[i] )
                }
         }
         return newArr;
    }
    var a = removeRepeat( [1, 3, 1, 4] );
    console.log(a);

    2.ES6中写法:

    function removeRepeat (arr) {
          return Array.from( new Set(arr) );
    }
    var b = removeRepeat([1, 3, 3, 5, 5, 6, 6]);
    console.log(b);

    其他方法如下:----------------------------------------------------------------------------

    一:用双层for循环+push

    (双层循环,外层循环元素,内层循环时比较值;如果有相同的值则跳过,不相同则push进数组)

    Array.prototype.distinct = function() {
         var arr = this,
         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;
    }
    var arra = [1, 2, 3, 4, 4,  2, 1, 1];
    arra.distinct();
    console.log(arra.distinct());   //返回[3,4,2,1]

    二:利用splice直接在原数组进行操作

    (外层循环元素,内层循环时比较值; 值相同时,则删去这个值)

    Array.prototype.distinct = function() {
        var arr = this,
                        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;
    };
    var a = [1, 5, 3, 2, 4, 4, 1, 2, 1, 1, 1, ];
    var b = a.distinct();
    console.log(b.toString()); //1,5,3,2,4

    三:利用indexOf以及forEach

    Array.prototype.distinct = function() {
           var arr = this,
           result = [],
           len = arr.length;
           arr.forEach(function(v, i, arr) {             //这里利用map,filter方法也可以实现
                var bool = arr.indexOf(v, i + 1);        //从传入参数的下一个索引值开始寻找是否存在重复
                      if(bool === -1) {
                             result.push(v);
                      }
            })
           return result;
    };
    var a = [ 1, 1, 2, 2, 3, 3, 2, 1];
    var b = a.distinct();
    console.log(b.toString()); //3,2,1

    四:利用ES6的set

    function dedupe(array) {
           return Array.from(new Set(array));
    }
    dedupe([1, 1, 2, 3]) 
    let arr = [1, 2, 3, 3];
    let resultarr = [...new Set(arr)];   //拓展运算符(...)内部使用for...of循环
    console.log(resultarr); //[1,2,3]

  • 相关阅读:
    Linux基础(一)
    计算机基础之网络基础
    计算机基础之操作系统
    计算机基础之计算机硬件基础
    .NET Reflector 8.2支持VS2013高亮显示和代码地图视图
    jQuery图表开源软件
    8个实用的页面布局和用户界面jQuery插件
    关于mvc3.0RadioButtonFor的使用
    链式调用-python
    给实数用千分位方法输出结果
  • 原文地址:https://www.cnblogs.com/xuanranit/p/8455841.html
Copyright © 2020-2023  润新知