日常工作中常用的一些数组的去重的方法

1.Es6 新增的 set 去重

类似数组,但是它有一大特性就是所有元素都是唯一的,没有重复。因此,我们可以利用这一唯一特性进行数组的去重工作,这种方式代码是最少的,在不考虑性能的情况下,这是最方便的

function wipeRepeat(arr) {
    
    
  let set = new Set(arr); //此时的set是一个对象
  arr1 = [...set]; //利用扩展运算符展开赋值,生成一个新的数组
  return arr1;
}
let newArr = [1, 2, 3, 4, 5, 1, 1, 1, 1];
console.log(wipeRepeat(newArr)); //[1,2,3,4,5]

2.forEach+indexOf 去重

利用数组的 forEach, indexOf 方法,判断数组中是否有这一项,然后放入到一个新的数组里面

function wipeRepeat(arr) {
    
    
  let newArr = []; //定义一个空数组,来存放重复的值
  arr.forEach(item => {
    
    
    if (newArr.indexOf(item) == -1) {
    
    
      //判断空数组中是否有这个值,如果没有,就放到这个数组中,否则则不
      newArr.push(item);
    }
  });
  return newArr;
}
let arr = [1, 2, 2, 2, 2, 2, 2, 3];
console.log(wipeRepeat(arr)); //[1,2,3]

3.使用数组 filter+indexOf 方法

使用数组的 filter()方法过滤出第一次出现的某个值

function wipeRepeat(arr) {
    
    
  return arr.filter((item, index) => {
    
    
    return arr.indexOf(item) === index;
  });
}
let arr = [1, 2, 3, 3, 3, 3, 3];
console.log(wipeRepeat(arr)); //[1,2,3]

4.数组 sort 结合 for 循环

数组 sort 排序,然后遍历两者比较,把不相同的一方放入到一个新的数组里面

function wipeRepeat(arr) {
    
    
  let arr1 = []; //定义一个空数组
  arr.sort((a, b) => {
    
    
    //利用sort()方法对数组进行排序,如果相同放在一起
    return a - b;
  });
  for (let i = 0; i < arr.length; i++) {
    
    
    if (arr[i] !== arr[i - 1]) {
    
    
      //前后比较,不同的话的就放入到一个新的数组里面
      arr1.push(arr[i]);
    }
  }
  return arr1;
}
let arr = [1, 3, 2, 3, 2, 4];
console.log(wipeRepeat(arr)); //[1,2,3,4]

5.利用 JavaScript 对象的特点

利用对象的属性不能重复的特点结合 for 循环实现数组去重(一个键名和一个键值称为是一个属性)

function wipeRepeat(arr) {
    
    
  let newArr = [];
  let obj = {
    
    };
  for (var i = 0; i < arr.length; i++) {
    
    
    //判断对象中是否有这个属性名
    if (!obj[arr[i]]) {
    
    
      //如果没有的话,赋值为1,例{1:1,2:1,3:1}
      obj[arr[i]] = 1;
      newArr.push(arr[i]); //然后根据索引把这些不重复的值放入新的数组中
    }
  }
  return newArr;
}
let arr = [1, 2, 2, 3, 4];
console.log(wipeRepeat(arr)); //[1,2,3,4]

6.数组的 includes 方法;

利用数组的 includes 方法,判断一个数组中是否有某个值,如果没有,就放到一个新的数组里面

function wipeRepeat(arr) {
    
    
  let newArr = []; //空数组用来存放重复的数值
  for (let i = 0; i < arr.length; i++) {
    
    
    if (!newArr.includes(arr[i])) {
    
    
      //判断新数组中是否包含这个值
      newArr.push(arr[i]);
    }
  }
  return newArr; //返回这个新的数组
}
let arr = [1, 3, 3, 3, 4];
console.log(wipeRepeat(arr)); //[1,3,4]

7.双重 for 循环比较

利用循环两两比较,结合数组的 splice 方法,进行截取

function wipeRepeat(arr) {
    
    
  for (let i = 0; i < arr.length; i++) {
    
    
    //自身不用跟自身进行比较,截取的时候会改变数组的长度,所以要进行j--
    for (let j = i + 1; j < arr.length; j++) {
    
    
      if (arr[i] == arr[j]) {
    
    
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}
let arr = [1, 3, 3, 3, 4];
console.log(wipeRepeat(arr)); //[1,3,4]

数组去重的方法还有好多种,我这个只是写出了几个日常生活中常用的一些去重的方法,如果还有一些简便快捷的方法,希望大家评论区给我留言,大家一起共同进步

猜你喜欢

转载自blog.csdn.net/weixin_45356397/article/details/103049653