【js数组去重方法】在JavaScript开发中,数组去重是一个常见的需求。不同的数据结构和业务场景下,可以选择不同的去重方法。以下是一些常用的数组去重方式,结合实际使用场景进行总结,并以表格形式展示。
一、常见去重方法总结
1. 使用Set对象
Set对象是ES6引入的一种数据结构,它自动去重,非常适合用于数组去重。
2. 使用filter+indexOf
利用数组的filter方法配合indexOf,逐个检查元素是否重复。
3. 使用reduce+includes
使用reduce方法遍历数组,通过includes判断元素是否已存在,实现去重。
4. 使用双重循环
通过嵌套循环比较每个元素,将不重复的元素放入新数组中。
5. 使用Map对象
Map对象可以保存键值对,利用其键的唯一性来实现去重。
6. 使用Array.from+Set
将Set转换为数组,实现更简洁的去重操作。
二、去重方法对比表
| 方法名称 | 是否支持复杂类型 | 是否保留原始顺序 | 是否性能较好 | 代码示例 |
| Set + Array.from | 否 | 是 | 高 | `Array.from(new Set(arr))` |
| filter + indexOf | 否 | 是 | 中 | `arr.filter((v, i) => arr.indexOf(v) === i)` |
| reduce + includes | 否 | 是 | 中 | `arr.reduce((acc, v) => acc.includes(v) ? acc : [...acc, v], [])` |
| 双重循环 | 否 | 是 | 差 | `let res = []; for (let i=0; i |
| Map | 否 | 是 | 高 | `Array.from(new Map(arr.map(v => [v, v])).values())` |
| 简单的for循环 | 否 | 是 | 中 | `let res = []; for (let i=0; i |
三、注意事项
- 如果数组中包含对象等复杂类型,上述方法均无法直接去重,需要自定义判断逻辑。
- 原始顺序是否重要,会影响去重方法的选择。
- 性能方面,Set和Map方法效率较高,推荐优先使用。
四、小结
在JavaScript中,数组去重的方法多种多样,可以根据实际需求选择合适的方式。对于简单数据类型的数组,推荐使用Set或Map;对于需要保留顺序或处理复杂数据的情况,则需采用更灵活的逻辑实现。合理选择去重方法,可以提升代码的可读性和运行效率。


