### JavaScript数组去重的5种高效方法
#### 1. 使用Set数据结构
```javascript
function uniqueWithSet(arr) {
return [...new Set(arr)];
}
```
Set是ES6新增的数据结构,它只存储唯一值。通过将数组转换为Set,再使用扩展运算符转回数组,即可实现快速去重。
#### 2. 使用filter和indexOf
```javascript
function uniqueWithFilter(arr) {
return arr.filter((item, index) => arr.indexOf(item) === index);
}
```
利用indexOf方法返回第一个匹配项的索引特性,配合filter筛选出首次出现的元素。
#### 3. 使用reduce方法
```javascript
function uniqueWithReduce(arr) {
return arr.reduce((acc, current) => {
if (!acc.includes(current)) {
acc.push(current);
}
return acc;
}, []);
}
```
通过reduce方法累积不重复的元素,结合includes方法判断元素是否已存在。
#### 4. 使用对象键值对
```javascript
function uniqueWithObject(arr) {
let obj = {};
return arr.filter(item => {
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true);
});
}
```
利用对象的键名不可重复的特性,通过类型+值的组合作为键名来标识唯一性。
#### 5. 使用Map数据结构
```javascript
function uniqueWithMap(arr) {
let map = new Map();
return arr.filter(item => !map.has(item) && map.set(item, true));
}
```
Map可以存储任意类型的键,通过has方法检查元素是否存在,set方法添加新元素。
性能比较:
- Set方法:性能最佳,代码最简洁
- Map方法:性能接近Set,兼容性稍好
- 对象方法:适合处理基本数据类型
- filter方法:代码直观但性能一般
- reduce方法:灵活性高但性能较低
根据实际需求选择合适的去重方法,对于大数据量推荐使用Set或Map,小数据量可使用filter等更直观的方法。
914

被折叠的 条评论
为什么被折叠?



