在JavaScript中,数组去重是一个常见的需求,它可以通过多种方式实现。这里小结几种常见且高效的方法:
### 1. 使用`Set`和扩展运算符`...`
这是最简单也最常用的方法之一,利用了`Set`数据结构的唯一性特性。
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]
### 2. 使用`filter()`和`indexOf()`
`filter()`方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。在这里,`indexOf()`用于检查当前元素是否是第一次出现。
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.filter((item, index) => array.indexOf(item) === index);
console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]
### 3. 使用`Map`对象
`Map`对象保存键值对,并且可以记住键的原始插入顺序。这种方法同样利用了数据结构的唯一性特性。
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = Array.from(new Map(array.map(item => [item, item])).values());
console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]
### 4. 使用`reduce()`
`reduce()`方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.reduce((acc, current) => {
if (acc.indexOf(current) === -1) {
acc.push(current);
}
return acc;
}, []);
console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]
### 总结
- 使用`Set`和扩展运算符是最简洁且现代的方法。
- `filter()`结合`indexOf()`方法也很常用,但在大数据集上可能效率较低。
- `Map`对象和`reduce()`方法提供了更多灵活性和可能的性能优化,但在某些情况下可能显得较为冗长。
选择合适的方法取决于具体的使用场景和个人偏好。