array.from(new set(arr))和[...new set(arr)]均可一行高效去重,前者兼容性更好、语义更明确,后者更简洁;二者均依赖set的唯一性特性(基于===比较),适用于基础类型,但对对象等引用类型仅按内存地址去重。

直接用 Array.from(new Set(arr)) 或展开运算符 [...new Set(arr)] 即可,两者都是一行代码,语义清晰、性能好、兼容主流环境。
为什么 Set 能天然去重?
Set 是 ES6 引入的集合类型,只存储唯一值——相同类型的相同值(严格相等,===)不会重复添加。数组转为 Set 时,重复项自动被忽略,再转回数组就完成了去重。
两种一行写法及适用场景
-
[...new Set(arr)]:更简洁常用,依赖展开运算符,需确保运行环境支持(ES2015+,现代浏览器和 Node.js 皆支持) -
Array.from(new Set(arr)):兼容性略高(可配合 Babel 转译到 ES5),语义更明确,适合对兼容性有要求的项目
注意:只适用于基础类型和简单引用场景
Set 去重基于 === 比较,因此:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 对数字、字符串、布尔值、
null、undefined等完全可靠 - 对对象、数组等引用类型,每个新对象都是不同引用,
new Set([{a:1}, {a:1}])不会去重——此时需手动实现深比较或使用JSON.stringify等策略(但非一行能解决)
小技巧:连带处理空值与类型统一
如果数组含 undefined、null 或混合类型(如 '1' 和 1),Set 默认不认为它们相等。需要额外逻辑时,建议先映射再 Set,例如:
[...new Set(arr.map(item => item?.toString()))] —— 统一转字符串后去重(按需调整)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










