Set天然支持去重因其自动忽略重复值、只保留首次出现元素,使用Object.is()规则判断相等;适用于原始类型数组去重,如[...new Set(arr)],但对对象等引用类型无效。

直接用 Set 构造函数包裹数组,再转回数组,就能一行代码完成去重——这是利用其唯一性最简洁的方式。
为什么 Set 天然支持去重
Set 是 ES6 引入的集合类型,它的核心特性是:**自动忽略重复值,只保留首次出现的元素**。它不基于深比较,而是使用类似 Object.is() 的规则判断是否相等(比如 0 和 -0 被视为相同,NaN === NaN 为 false,但 Set 中只存一个 NaN)。
基础用法:一行实现简单去重
适用于元素为原始类型(string、number、boolean、null、undefined、symbol)的场景:
const uniqueArr = [...new Set(arr)]const uniqueArr = Array.from(new Set(arr))
例如:const arr = [1, 2, 2, 3, 'a', 'a', true, true];console.log([...new Set(arr)]); // [1, 2, 3, 'a', true]
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
注意对象和数组无法靠 Set 直接去重
Set 对引用类型(如普通对象、数组)按内存地址判断,所以 {a:1} 和 {a:1} 被视为两个不同值:
-
const set = new Set([{a:1}, {a:1}]);→ size 为 2 - 若需对象去重,得先提取唯一标识(如
id字段),用Map或filter + findIndex配合逻辑判断 - 或者序列化后去重(仅限可安全 JSON 化的简单对象,且性能较差)
扩展技巧:结合其他操作保持顺序或筛选
Set 会保持插入顺序,因此去重后顺序不变。还可链式组合:
- 去重 + 过滤:
[...new Set(arr)].filter(x => x > 0) - 去重 + 映射:
[...new Set(arr)].map(x => x * 2) - 多个数组合并去重:
[...new Set([...arr1, ...arr2, ...arr3])]
不复杂但容易忽略。

















