es6的set对象是处理数组去重和集合运算的理想工具,支持去重、交集、并集、差集等操作,写法简洁、性能良好且语义清晰。

ES6 的 Set 对象是处理数组去重和集合运算的天然选择,写法简洁、性能良好,且语义清晰。
用 Set 快速去重(保留原始顺序)
Set 自动忽略重复值,转回数组即可完成去重。关键是用扩展运算符 [...new Set(arr)],它能保持元素首次出现的顺序。
- 基础写法:
const unique = [...new Set([1,2,2,3,4,4])]; // [1,2,3,4] - 支持任意类型(包括对象需注意引用):对基本类型完全可靠;对对象数组,需先提取唯一标识(如 id)再映射还原
- 避免误用:
Array.from(new Set(arr))效果相同,但扩展运算符更常用、更直观
计算两个数组的交集(共同元素)
交集即同时存在于 A 和 B 中的元素。思路是:把一个数组转为 Set,再用 filter 筛选另一个数组中被该 Set 包含的项。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 示例:
const a = [1,2,3]; const b = [2,3,4]; const intersection = [...new Set(a)].filter(x => new Set(b).has(x)); // [2,3] - 优化写法(避免重复创建 Set):
const setB = new Set(b); const intersection = [...new Set(a)].filter(x => setB.has(x)); - 注意:结果默认无序且去重,若原数组有重复且需保留交集中的重复次数,
Set不适用,得换用 Map 或循环计数
计算两个数组的并集(所有不重复元素)
并集就是把两个数组合并后去重。最简方式是用 Set 构造时传入拼接后的数组,或直接 add 所有元素。
- 简洁写法:
const union = [...new Set([...a, ...b])]; // [1,2,3,4] - 也可分步:
const set = new Set(a); b.forEach(x => set.add(x)); const union = [...set]; - 优势:自动排重,无需手动判断是否已存在,代码干净,时间复杂度接近 O(n+m)
拓展:差集(A 有而 B 没有的元素)
差集常被忽略,但逻辑清晰:遍历 A,只保留那些不在 B 的 Set 中的元素。
- 写法:
const setB = new Set(b); const difference = [...new Set(a)].filter(x => !setB.has(x)); // [1](当 a=[1,2,3], b=[2,3,4]) - 注意区分“A−B”和“B−A”,调换 filter 条件即可
- 如果要实现对称差集(仅在其中一个数组中出现),可用
(A−B) ∪ (B−A),即两次 filter 后 concat 再去重
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










