返回
巧用妙计,剥丝抽茧——数组去重绝妙方法
前端
2023-09-10 07:23:53
在编程中,数组去重是一个经常遇到的问题,即如何从一个数组中去除重复的元素,得到一个不含重复元素的新数组。本文将介绍三种常见的数组去重方法,包括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中,我们可以使用双层循环来实现数组去重。具体步骤如下:
- 外层循环遍历数组中的每个元素。
- 内层循环遍历从外层循环元素开始到数组末尾的所有元素。
- 如果内层循环元素与外层循环元素相同,则将内层循环元素从数组中删除。
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方法来实现数组去重。具体步骤如下:
- 遍历数组中的每个元素。
- 使用indexOf方法检查当前元素是否在数组中已经存在。
- 如果当前元素在数组中已经存在,则将当前元素从数组中删除。
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的去重方法。