返回

巧用妙计,剥丝抽茧——数组去重绝妙方法

前端





在编程中,数组去重是一个经常遇到的问题,即如何从一个数组中去除重复的元素,得到一个不含重复元素的新数组。本文将介绍三种常见的数组去重方法,包括ES6中的Set去重、ES5中的双层循环去重以及利用indexOf的去重方法,并对这三种方法的优缺点进行分析,帮助读者选择最适合自己的去重方法。

**方法一:ES6中的Set去重** 

ES6中提供了Set数据结构,Set是一种无序的、不重复的元素集合。我们可以利用Set的特性来实现数组去重。具体步骤如下:

1. 将数组转换为Set对象。
2. 再将Set对象转换为数组。

```javascript
const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const set = new Set(arr);
const newArr = [...set];
console.log(newArr); // [1, 2, 3, 4, 5]

优点:

  • 代码少,实现简单。
  • 能够排除空对象{}。

缺点:

  • 不能排除NaN和undefined。
  • 性能不如其他方法。

方法二:ES5中的双层循环去重

在ES5中,我们可以使用双层循环来实现数组去重。具体步骤如下:

  1. 外层循环遍历数组中的每个元素。
  2. 内层循环遍历从外层循环元素开始到数组末尾的所有元素。
  3. 如果内层循环元素与外层循环元素相同,则将内层循环元素从数组中删除。
const arr = [1, 2, 3, 4, 5, 1, 2, 3];

for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] === arr[j]) {
      arr.splice(j, 1);
      j--;
    }
  }
}

console.log(arr); // [1, 2, 3, 4, 5]

优点:

  • 能够排除NaN和undefined。
  • 性能优于Set去重。

缺点:

  • 代码较多,实现复杂。
  • 不能排除空对象{}。

方法三:利用indexOf的去重方法

我们可以利用indexOf方法来实现数组去重。具体步骤如下:

  1. 遍历数组中的每个元素。
  2. 使用indexOf方法检查当前元素是否在数组中已经存在。
  3. 如果当前元素在数组中已经存在,则将当前元素从数组中删除。
const arr = [1, 2, 3, 4, 5, 1, 2, 3];

for (let i = 0; i < arr.length; i++) {
  if (arr.indexOf(arr[i]) !== i) {
    arr.splice(i, 1);
    i--;
  }
}

console.log(arr); // [1, 2, 3, 4, 5]

优点:

  • 代码较少,实现简单。
  • 能够排除NaN和undefined。
  • 能够排除空对象{}。

缺点:

  • 性能不如双层循环去重。

总结

以上三种数组去重方法各有优缺点,读者可以根据自己的实际情况选择最适合自己的方法。如果数组中包含NaN或undefined,则可以使用双层循环去重或利用indexOf的去重方法。如果数组中包含空对象{},则可以使用利用indexOf的去重方法。如果数组中的元素较少,则可以使用Set去重。如果数组中的元素较多,则可以使用双层循环去重或利用indexOf的去重方法。