美文网首页
js 数组去重的几种方式

js 数组去重的几种方式

作者: lucerneflyee | 来源:发表于2021-04-15 19:37 被阅读0次
    // 输入
    var array = [1, 2, 3, 4, 5, 1, 1, 2, 4, 7, 1, 1, 3, 2, 5];
    
    //输出 
    [1, 2, 3, 4, 5, 7]
    
    一、Array.from + Set
    // 兼容性不行并且无法去掉“{}”空对象
    Array.from(new Set(array));
    
    二、Set、扩展运算符
    // 同上
    [...new Set(array)]
    
    三、filter + indexOf
    array.filter((a, index, arr)=>{
        return self.indexOf(a) === index;
    });
    
    四、indexOf
    var _array = [];
    for (var i = 0; i < array.length; i++) {
       if (!~_array.indexOf(array[i])) {
         _array.push(array[i])
       }
    }
    
    五、includes
    // 同上
    let _array = [];
    array.forEach((a)=>{
        if(!_array.includes(a)){
           _array.push(a);
        }
    });
    
    六、上面【五】reduce版本
    //上面【5】reduce版本
    var _array = array.reduce(function (res, a, i, arr) {
        if(!res.includes(a)){
           res.push(a);
        }
        return res;
    }, []);
    
    七、上面简写版本
    // 上面简写版本
    var _array = array.reduce((res, a) => res.includes(a) ? res : [...res, a],[]);
    
    八、利用双层for嵌套 splice去重
    // ES5
    for(var i=0; i<array.length; i++){
        for(var j=i+1; j<array.length; j++){
            if(array[i]==array[j]){//第一个等同于第二个,splice方法删除第二个
               array.splice(j,1);
               j--;
            }
        }
    }
    
    九、排序之后前后相互判断去重
    array = array.sort();
    var _arrry = [array[0]];
    for (var i = 1; i < array.length; i++) {
       if (array[i] !== array[i-1]) {
          _arrry.push(array[i]);
       }
    }
    
    十、递归去重
    var len = array.length;
    array.sort();  //先排序
    function loop(index){
       if(index >= 1){
          if(array[index] === array[index-1]){
             array.splice(index,1);
          }
          loop(index - 1); 
       }
    }
    loop(len-1);
    console.log(array);
    
    十一、对象属性 对象属性不能重复
    var _array = [];
    var  obj = {};
    array.forEach((a, i, arr)=> {
        if (!obj[a]) {
           _array.push(a)
           obj[a] = 1;
        } else {
           obj[a]++;
        }
    });
    console.log(_array);
    
    十二、hasOwnProperty
    var obj = {};
    var _array = array.filter(function(item, index, arr){
         return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true);
    })
    
    十三、Map
    var map = new Map();
    var _array = new Array();  // 数组用于返回结果
    for (let i = 0; i < array.length; i++) {
      if(map.has(array[i])) {  // 如果有该key值
        map.set(array[i], true);
      } else {
        map.set(array[i], false);   // 如果没有该key值
        _array.push(array[i]);
      }
    }
    

    相关文章

      网友评论

          本文标题:js 数组去重的几种方式

          本文链接:https://www.haomeiwen.com/subject/ohdjlltx.html