set去重一行搞定:[...new set(arr)],适用于基本类型;对象数组需序列化或自定义逻辑;天然保序、性能优,但ie需用array.from兼容。

直接用 Set 构造函数包裹数组,再用扩展运算符转回数组,一行就能去重:
基础用法:一行搞定简单去重
Set 是 ES6 引入的内置对象,自动忽略重复值,只保留唯一项。对原始数组无副作用,返回新数组。
- 写法:
[...new Set(arr)] - 示例:
const arr = [1, 2, 2, 3, 3, 4]; const unique = [...new Set(arr)]; // [1, 2, 3, 4] - 适用:数值、字符串、布尔值等基本类型,以及
undefined和null
注意:对象和数组无法靠 Set 直接去重
Set 判断唯一性基于“严格相等(===)”,而对象和数组是引用类型,即使内容相同,内存地址不同就视为不同元素。
- 错误示例:
[...new Set([{a:1}, {a:1}])] → 仍返回两个对象 - 正确思路:先序列化(如
JSON.stringify),去重后再解析;或用filter + findIndex配合自定义比较逻辑 - 小技巧:若只需按某个字段(如
id)去重,可用Map或reduce实现
进阶:保留首次出现顺序 & 兼容旧环境
Set 天然保持插入顺序,所以 [...new Set(arr)] 结果中元素顺序与原数组首次出现顺序一致。
- 兼容性:现代浏览器和 Node.js 6+ 均支持;若需支持 IE,可用
Array.from(new Set(arr))替代扩展运算符(效果相同) - 性能优势:比
filter(indexOf)或双循环快得多,尤其在大数据量时 - 额外用途:可结合
Set.prototype.has()快速查重,比includes更高效
不复杂但容易忽略:Set 只解决“值唯一”,不处理“结构等价”。按需选择方法,基本类型优先用 Set,引用类型得另想办法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











