用 set 去重数组最直接的方式是 [...new set(arr)],适用于基本类型,性能好、兼容 es6+;但对象和数组需序列化等额外处理,不可直接去重。

用 Set 去重数组最直接的方式就是:把数组传给 new Set(),再转回数组——一行代码搞定,且性能好、兼容性够用(ES6+)。
基础用法:一行转 Set 再转回数组
这是最常用也最推荐的写法,适用于基本类型(数字、字符串、布尔值等):
const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; // 结果:[1, 2, 3, 4, 5]
-
new Set(arr)自动过滤重复项,只保留首次出现的值 -
[...]展开运算符把 Set 转为新数组,简洁高效 - 比
filter() + indexOf()或reduce()更快,尤其在大数据量时
注意:对象和数组无法靠 Set 直接去重
Set 判断重复靠的是「引用相等」,不是「内容相等」。所以:
-
new Set([{a:1}, {a:1}])会保留两个对象(地址不同) -
new Set([[1], [1]])同样保留两个数组 - 需要去重复杂数据时,得先序列化(如
JSON.stringify),或用 Map/Map + JSON 键做临时映射
进阶技巧:结合其他操作一起用
去重常不是最终目的,可链式组合:
- 去重 + 排序:
[...new Set(arr)].sort((a, b) => a - b) - 去重 + 过滤:
[...new Set(arr)].filter(x => x > 0) - 去重字符串数组并忽略大小写:
[...new Set(arr.map(x => x.toLowerCase()))]
兼容性与替代方案
如果必须支持 IE 或老环境,Set 不可用,可用:
-
filter + indexOf(简单但 O(n²)) -
reduce+ 数组查找(稍优) - 第三方库如 Lodash 的
_.uniq()
不过现代项目基本无需顾虑,Set 是目前最自然、最轻量的去重方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











