在 JavaScript 中,有多种方法可以对数组进行去重。以下是五种常见的实现方式:
1. 使用 Set
Set
是 ES6 中新增的数据结构,它类似于数组,但 Set
的值是的。
```javascript
function uniqueWithSet(arr) {
return [...new Set(arr)];
}
// 示例
const arr = [1, 2, 2, 3, 4, 4, 5];
console.log(uniqueWithSet(arr)); // [1, 2, 3, 4, 5]
```
2. 使用 filter
和 indexOf
通过 filter
方法结合 indexOf
来判断元素是否是次出现。
```javascript
function uniqueWithFilter(arr) {
return arr.filter((item, index) => arr.indexOf(item) === index);
}
// 示例
const arr = [1, 2, 2, 3, 4, 4, 5];
console.log(uniqueWithFilter(arr)); // [1, 2, 3, 4, 5]
```
3. 使用 reduce
通过 reduce
方法累积结果,并在累积过程中检查重复项。
```javascript
function uniqueWithReduce(arr) {
return arr.reduce((acc, item) => {
if (!acc.includes(item)) {
acc.push(item);
}
return acc;
}, []);
}
// 示例
const arr = [1, 2, 2, 3, 4, 4, 5];
console.log(uniqueWithReduce(arr)); // [1, 2, 3, 4, 5]
```
4. 使用 forEach
和对象键值对
利用对象的键名性来实现去重。
```javascript
function uniqueWithObject(arr) {
const obj = {};
const result = [];
arr.forEach(item => {
if (!obj[item]) {
obj[item] = true;
result.push(item);
}
});
return result;
}
// 示例
const arr = [1, 2, 2, 3, 4, 4, 5];
console.log(uniqueWithObject(arr)); // [1, 2, 3, 4, 5]
```
5. 使用 Map
类似于使用对象的方法,但 Map
提供了更灵活的键值对存储。
```javascript
function uniqueWithMap(arr) {
const map = new Map();
const result = [];
arr.forEach(item => {
if (!map.has(item)) {
map.set(item, true);
result.push(item);
}
});
return result;
}
// 示例
const arr = [1, 2, 2, 3, 4, 4, 5];
console.log(uniqueWithMap(arr)); // [1, 2, 3, 4, 5]
```
这些方法各有优缺点,选择哪种方法可以根据具体的需求和代码风格来决定。例如,Set
是最简洁和高效的方法,但在需要兼容旧版浏览器时可能需要使用其他方法。