关于js数组去重的问题小结


在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()`方法提供了更多灵活性和可能的性能优化,但在某些情况下可能显得较为冗长。

选择合适的方法取决于具体的使用场景和个人偏好。