JavaScript中可用Set配合扩展运算符和filter实现差集:先用[...setA]转数组,再filter(x => !setB.has(x))筛选出仅在A中不在B中的元素,最终返回新Set以保持唯一性。

JavaScript 中可以用 Set 配合扩展运算符(...)和数组过滤方法,快速实现两个集合的差集(即 A - B:属于 A 但不属于 B 的元素)。
理解差集的逻辑
差集 A - B 是指所有在集合 A 中、但不在集合 B 中的元素。注意 Set 本身不提供内置的差集方法,需借助数组操作或迭代完成。
基础写法:用 filter + has 实现
将 Set 转为数组后,用 filter 筛选出不在另一个 Set 中的元素:
// 示例:求 setA 相对于 setB 的差集(setA - setB)
立即学习“Java免费学习笔记(深入)”;
const setA = new Set([1, 2, 3, 4]); const setB = new Set([3, 4, 5, 6]); <p>const difference = [...setA].filter(x => !setB.has(x)); // 结果:[1, 2]
封装成可复用函数
把逻辑抽成函数,提高复用性和可读性:
- 接收两个 Set 实例作为参数
- 返回新的 Set(保持唯一性,且类型一致)
- 避免修改原集合
// 返回新 Set,更符合集合操作语义
const difference = (a, b) => new Set([...a].filter(x => !b.has(x)));
<p>const setA = new Set(['a', 'b', 'c']);
const setB = new Set(['b', 'c', 'd']);
const result = difference(setA, setB); // Set {'a'}注意点与常见误区
扩展运算符展开 Set 时,只对可迭代对象有效(Set 天然支持),但要注意:
- 不能直接对 Set 用
filter—— Set 没有 filter 方法,必须先转数组 - 元素类型需能被
Set.has()正确比较(如对象引用比较,不是深比较) - 若需深差集(如对象内容比较),应改用自定义逻辑,而非依赖
has
不复杂但容易忽略。


















