最常用且推荐的方法是[...new Set(arr)],它利用Set自动去重并转回数组,适用于数字、字符串等基本类型,但对对象等引用类型无效。

可以用 Set 结合扩展运算符一行实现:
使用 Set + 扩展运算符(最常用)
Set 自动去除重复值,再转回数组:
[...new Set(arr)]例如:
const arr = [1, 2, 2, 3, 4, 4];const unique = [...new Set(arr)]; // [1, 2, 3, 4]
兼容字符串或对象?注意类型限制
Set 去重基于 SameValueZero 比较,对基本类型(数字、字符串、布尔)完全可靠;但对对象、数组等引用类型无效,因为它们内存地址不同:
立即学习“Java免费学习笔记(深入)”;
- [...new Set([{a:1}, {a:1}])] → 仍返回两个对象
- 如需对象去重,需额外逻辑(如根据 id 字段过滤),无法单行通用解决
其他一行写法(不推荐但可行)
利用 filter + indexOf:
arr.filter((item, index) => arr.indexOf(item) === index)缺点:时间复杂度 O(n²),大数据量时性能差;且无法处理 NaN(NaN !== NaN,但 indexOf 能识别 NaN)。
小结
日常开发中,[...new Set(arr)] 是最简洁、高效、可读性强的标准方案,适用于所有基本类型数组。记住它就够了。


















