[...new Set(arr)]能去重是因为Set只存储唯一值,自动忽略重复项,再用扩展运算符转为数组;适用于原始类型,保持顺序,NaN视为相等,但不支持对象数组和IE。

[...new Set(arr)]
为什么这行代码能去重
Set 是 ES6 新增的数据结构,它只允许存储唯一值,自动忽略重复项。将数组传入 new Set() 构造函数,会生成一个无重复元素的集合;再用扩展运算符 [...] 将其转回数组,就完成了去重。
适用场景和注意事项
这方法适用于大多数基础去重需求,但有几点要留意:
- 只对原始类型(如数字、字符串、布尔值)和相同引用的对象严格有效;对对象数组不起作用(因为每个 {} 都是不同引用)
- 保持原数组中首次出现的顺序
- 无法处理 NaN(但 Set 中 NaN 被视为相等,所以
[NaN, NaN]会被正确去成[NaN]) - 不兼容 IE 浏览器(需考虑是否需要 polyfill 或降级方案)
简单对比其他写法
相比 filter + indexOf 或 reduce 等方式,[...new Set(arr)] 更短、更易读、性能更好(Set 底层是哈希表,查找为 O(1))。
立即学习“Java免费学习笔记(深入)”;
例如:
const arr = [1, 2, 2, 3, 3, 4];
const unique = [...new Set(arr)]; // → [1, 2, 3, 4]


















