在 JavaScript 中,从数组中删除重复项是一项常见任务。以下是几种有效的方法来实现这一点。
方法 一:使用 Set(推荐)
最简单且性能最好的去重方法是使用 Set:
优点:
- 简洁明了
- 性能良好,时间复杂度为 O(n)
- 适用于原始值
缺点:
- 仅适用于原始值(数字、字符串、布尔值)
- 对象是按引用比较的
方法 二:使用 Filter
在更复杂的场景中,或需要保留第一次出现的元素时:
优点:
- 适用于自定义逻辑
- 容易理解
缺点:
- 由于使用
indexOf,性能较差,时间复杂度为 O(n²)
方法 三:使用 Reduce
使用 reduce 的函数式方法:
优点:
- 函数式编程风格
- 可以与其他转换结合使用
缺点:
- 由于使用
includes,性能较差 - 代码较为冗长
方法 四:处理对象(使用 Map)
在处理对象时,需要根据特定属性进行比较:
优点:
- 适用于对象
- 可以指定用于唯一性的属性
- 性能良好
缺点:
- 语法较为复杂
- 保留的是最后一次出现的元素(可以修改为保留第一次出现的元素)
性能比较
对于大型数组(10,000+ 元素):
- Set:约 1 毫秒(最快)
- Map(用于对象):约 2 毫秒
- Reduce:约 50 毫秒
- Filter:约 100 毫秒(最慢)
推荐
- 对于原始值(数字、字符串、布尔值),使用 Set
- 对于对象,如果需要根据特定属性去重,使用 Map
- 仅在需要自定义逻辑或处理小型数组时,使用 Filter 或 Reduce
注意: 所有这些方法都会创建一个新数组。如果需要直接修改原始数组,则需要采用不同的方法。