最简去重方法是[...new set(arr)],利用set自动去重且保持原序的特性,适用于基本类型;对象数组需用filter+findindex等方案。

直接用 Array.from(new Set(arr)) 或展开运算符 [...new Set(arr)] 即可,后者更简洁。
为什么 Set 能去重?
Set 是 ES6 引入的集合数据结构,它的核心特性是自动忽略重复值,只保留唯一项。无论原始数组有多少重复元素,转成 Set 后就只剩一个副本。
最简一行写法(推荐)
[...new Set(arr)] —— 利用展开运算符把 Set 实例转回数组,代码最短、可读性好、性能也不错。
- 适用于字符串、数字、布尔值等基本类型
- 不适用于对象或嵌套数组(因为对象比较的是引用,不是内容)
- 顺序保持原数组首次出现的顺序
兼容老环境的写法(备用)
如果需支持 IE 等不支持 Set 的环境,可用 Array.from(new Set(arr)),语义相同但字符略多。
-
Array.from()显式将类数组/可迭代对象转为数组 - 和展开运算符效果一致,但兼容性稍好一点(仍需 Set 支持)
注意:不能用于对象数组去重
比如 [{id:1},{id:1}] 用 [...new Set(arr)] 不会去重,因为两个对象内存地址不同。此时需用 filter + findIndex 或 Map 等方案,不属于 Set 的适用场景。











