关键词

js数组去重的常用方法总结

好,下面是关于“js数组去重的常用方法总结”的完整攻略。

js数组去重的常用方法总结

一、利用Set去重

ES6新增了Set容器,可以创建一个不重复的集合。因此,利用Set可以快速去重,代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = Array.from(new Set(arr));   // [1, 2, 3, 4, 5]

首先将数组转换成Set对象,然后再将Set对象转换成数组即可。这种方法简单易懂,但只适用于基本数据类型。如果需要去重的是复杂数据类型,需要注意Set中对象的比较方式是浅比较,因此可能会出现误判。

二、利用双重循环进行去重

双重循环的方式比较直观,代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = [];
for (let i = 0; i < arr.length; i++) {
  let isRepeat = false;
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] === arr[j]) {
      isRepeat = true;
      break;
    }
  }
  if (!isRepeat) {
    result.push(arr[i]);
  }
}

套两层循环,每次比较相邻的两个元素,如果有重复的再通过标记位去除即可。这种方法虽然不需要额外的空间,但时间复杂度较高,不适用于大规模数据的去重。

三、利用indexOf进行去重

indexOf方法可以查找数组中指定元素的位置,如果没有找到返回-1。基于这个原理,可以通过一次循环来实现去重,代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = [];
for (let i = 0; i < arr.length; i++) {
  if (result.indexOf(arr[i]) === -1) {
    result.push(arr[i]);
  }
}

单层循环,每次将数组中的元素与result中的元素比较,如果result中没有则加入。这种方法相对于双重循环要快一些,但也不太适用于大规模数据的去重。

四、利用Map进行去重

Map对象是一种简单的键/值映射。利用这种映射关系,就可以实现数组去重。代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const map = new Map();
const result = [];
for (let i = 0; i < arr.length; i++) {
  if (!map.has(arr[i])) {
    map.set(arr[i], true);
    result.push(arr[i]);
  }
}

利用Map的方法,每次将数组中的元素存入Map中,重复元素会被覆盖。利用has方法可以判断Map中是否存在该元素,如果不存在则将其保存至result中,这样就可以完成去重了。这种方法相对来说不太快,但适用性较广,可以实现复杂数据类型的去重。

五、利用reduce方法进行去重

Reduce方法是JS数组原型中的一个函数,它可以快捷地对数组中的每个元素进行操作。代码如下:

const arr = [1, 2, 3, 3, 4, 5, 4];
const result = arr.reduce((acc, cur) => {
  if (!acc.includes(cur)) {
    acc.push(cur);
  }
  return acc;
}, []);

使用reduce可以快速地对数组中元素去重。acc为存储去重后的数组,每次遍历时判断是否重复,如果不重复则加入acc中。这种方法也比较适用于复杂数据类型的去重。

总结

本文总结了js数组去重的五种常用方法,包括利用Set、双重循环、indexOf、Map以及reduce,各有特点,适用于不同数据类型和规模的去重需求。

本文链接:http://task.lmcjl.com/news/11205.html

展开阅读全文