JS Set需手动实现交并差:交集用filter+b.has(),并集用[...a,...b]自动去重,差集用filter+!b.has();可封装为setIntersection、setUnion、setDifference三个复用函数。

JS 的 Set 天然适合模拟数学集合,但原生不提供交/并/差方法,需手动实现。核心思路是遍历 + 判断成员关系,用 has() 配合构造新 Set。
交集(A ∩ B)
保留同时存在于两个集合中的元素。
- 遍历其中一个 Set(如 A),对每个值检查是否在另一个 Set(B)中存在
- 满足条件的值加入新 Set
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
const intersection = new Set([...a].filter(x => b.has(x)));
// → Set { 2, 3 }
并集(A ∪ B)
合并两个集合所有元素,自动去重。
- 用扩展运算符展开两个 Set 的值,传入新 Set 构造函数
- Set 构造器会自动剔除重复项
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
const union = new Set([...a, ...b]);
// → Set { 1, 2, 3, 4 }
差集(A − B,即 A 相对于 B 的补集)
保留在 A 中但不在 B 中的元素。
- 遍历 A,对每个值检查是否 不 在 B 中
- 符合条件的值加入新 Set
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
const difference = new Set([...a].filter(x => !b.has(x)));
// → Set { 1 }
封装成可复用函数
把逻辑抽成函数,提升复用性与可读性:
const setIntersection = (a, b) => new Set([...a].filter(x => b.has(x)));
const setUnion = (a, b) => new Set([...a, ...b]);
const setDifference = (a, b) => new Set([...a].filter(x => !b.has(x)));
// 使用
const A = new Set([1, 2, 5]);
const B = new Set([2, 5, 6, 7]);
console.log(setIntersection(A, B)); // Set { 2, 5 }
console.log(setUnion(A, B)); // Set { 1, 2, 5, 6, 7 }
console.log(setDifference(A, B)); // Set { 1 }


















