es2024起javascript的set原生支持intersection()和union()方法,分别返回两集合交集与并集的新set,保持不可变性、自动去重及调用方顺序;还新增difference()、symmetricdifference()、issubsetof()等方法。

JavaScript 中的 Set 自 ES2024 起原生支持 intersection() 和 union() 方法,无需手动遍历或转换数组,直接完成数学意义上的交集与并集运算。用法简洁、语义清晰,且返回全新 Set,不修改原始数据。
intersection() 求两个集合的共同元素
该方法返回一个新 Set,只包含调用方 Set 和传入可迭代对象(如另一个 Set、数组、Map 的键等)都拥有的值。
- 必须传入一个可迭代对象,不能是普通对象或 null
- 结果自动去重,即使输入含重复项也不影响
- 顺序按调用方 Set 中首次出现的顺序保留
示例:
const odds = new Set([1, 3, 5, 7, 9]);
const squares = new Set([1, 4, 9]);
const common = odds.intersection(squares);
console.log([...common]); // [1, 9]
union() 合并两个集合的所有唯一元素
该方法返回一个新 Set,包含调用方 Set 和传入可迭代对象中全部元素(自动去重)。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 支持任意可迭代类型:Set、Array、String、Map.keys() 等
- 不会改变原有 Set,符合函数式编程习惯
- 元素顺序:先按调用方 Set 的顺序,再追加对方中不在前者中的新元素
示例:
const evens = new Set([2, 4, 6, 8]);
const primes = new Set([2, 3, 5, 7]);
const all = evens.union(primes);
console.log([...all]); // [2, 4, 6, 8, 3, 5, 7]
注意事项和兼容性提醒
这些方法已在 Chrome 125+、Firefox 127+、Safari 17.5+ 中稳定支持,属于 ECMAScript 2024 标准的一部分。若需兼容旧环境,可用以下轻量降级方式:
-
union降级:new Set([...setA, ...setB]) -
intersection降级:new Set([...setA].filter(x => setB.has(x))) - 注意:降级写法不支持非 Set 类型的可迭代对象(如 Map),而原生方法支持
搭配其他新 Set 方法一起用更高效
ES2024 还新增了 difference()、symmetricDifference()、isSubsetOf() 等,可组合使用:
- 求 A 有但 B 没有的元素:
A.difference(B) - 求仅在 A 或仅在 B 的元素(异或):
A.symmetricDifference(B) - 判断是否为子集:
A.isSubsetOf(B)→ 返回布尔值
所有方法都保持不可变性,适合链式调用与状态管理场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










