JS数组去重的几种常见方法

215 阅读2分钟

JS数组去重的几种常见方法

  • 方法一
  • 最简单数组去重法
  • 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
  • IE8以下不支持数组的indexOf方法
function uniq(array){
    var temp = []; //一个新的临时数组
    for(var i = 0; i < array.length; i++){
        if(temp.indexOf(array[i]) == -1){
            temp.push(array[i]);
        }
    }
    return temp;
}

var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));
  • 方法二
  • 数组下标法
  • 还是得调用“indexOf”性能跟方法1差不多,
  • 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
  • 那么表示第i项是重复的,忽略掉。否则存入结果数组。
function uniq(array){
    var temp = [];
    for(var i = 0; i < array.length; i++) {
        //如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
        if(array.indexOf(array[i]) == i){
            temp.push(array[i])
        }
    }
    return temp;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));
  • 方法三
  • 排序后相邻去除法
  • 给传入数组排序,排序后相同值相邻,
  • 然后遍历时,新数组只加入不与前一值重复的值。
  • 会打乱原来数组的顺序
function uniq(array){
    array.sort();
    var temp=[array[0]];
    for(var i = 1; i < array.length; i++){
        if( array[i] !== temp[temp.length-1]){
            temp.push(array[i]);
        }
    }
    return temp;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));
  • 方法四
  • es6的set方法去重
  let arr = [1,0,0,2,9,8,3,1];
           function unique(arr) {
                 return Array.from(new Set(arr))
     }
    console.log(unique(arr));   // [1,0,2,9,8,3]
  • 方法五

  • 注:filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,array.filter(function(currentValue,index,arr), thisValue)

  currentValue:当前元素的值(必选参数)、index:当前元素的索引值(可选)、arr:当前元素属于的数组对象(可选)、thisValue:对象作为该执行回调时使用,传递给函数,用作 "this" 的值,默认undefined(可选)

   var arr = [1,2,8,9,5,8,4,0,4];
                  /*
                      模拟: 原始数组:[1,2,8,9,5,8,4,0,4]
                              索引值:0,1,2,3,4,5,6,7,8
                            伪新数组:[1,2,8,9,5,8,4,0,4]
                      使用indexOf方法找到数组中的元素在元素在中第一次出现的索引值
                             索引值:0,1,2,3,4,2,6,7,6
                         返回前后索引值相同的元素:
                           新数组:[1,2,8,9,5,4,0]        
                */
                 function unique( arr ){
                     // 如果新数组的当前元素的索引值 == 该元素在原始数组中的第一个索引,则返回当前元素
                     return arr.filter(function(item,index){
                         return arr.indexOf(item,0) === index;
                     });
                 }
                 console.log(unique(arr));    //  1, 2, 8, 9, 5, 4, 0