用set构造函数包裹数组再用扩展运算符转回数组可一步去重,适用于基本类型且保留原始顺序;对象需序列化处理,兼容老环境可用filter+indexof。

直接用 Set 构造函数包裹数组,再用扩展运算符转回数组,就能一步去重。
基础写法:一行搞定去重
Set 是 ES6 新增的集合类型,它只存储唯一值,自动忽略重复项。利用这个特性,可以非常简洁地实现数组去重:
const uniqueArray = [...new Set(originalArray)];- 适用于元素是基本类型(如字符串、数字、布尔值)的数组
- 对
NaN也有效(Set认为只有一个NaN)
注意:对象和数组无法靠 Set 直接去重
Set 判断唯一性基于「引用相等」,所以两个内容相同但地址不同的对象,会被视为不同元素:
-
new Set([{a:1}, {a:1}])长度为 2,不会去重 - 若需按内容去重,得先序列化(如
JSON.stringify),或手动遍历比对 - 简单示例:
[...new Map(arr.map(item => [JSON.stringify(item), item])).values()]
保留原始顺序 & 兼容老环境
Set 遍历时保持插入顺序,所以去重后数组顺序与原数组一致。如果需要兼容 IE 等不支持 Set 的环境,可用 filter + indexOf 替代:
arr.filter((item, index) => arr.indexOf(item) === index)- 性能不如
Set,尤其数据量大时;现代项目推荐优先用Set
结合其他操作一起用更高效
去重常不是最终目的,可链式处理:
- 去重 + 排序:
[...new Set(arr)].sort((a, b) => a - b) - 去重 + 过滤:
[...new Set(arr)].filter(x => x > 0) - 去重后求和:
[...new Set(arr)].reduce((sum, x) => sum + x, 0)
不复杂但容易忽略细节,用对了能省不少代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











