Skip to content

Set数据类型

集合运算操作

JavaScript 的 Set 对象自从 ES6 引入以来,主要用于确保列表中没有重复的元素。然而,随着即将推出的 7 种内置 Set 方法,我们可能会发现自己更频繁地使用它们。

并不是所有浏览器都支持以下的操作,如果想立即使用需要使用polyfills,引入代码如下:

js
 import 'core-js/actual/set/index.js'

并集 union

A ∪ B 将多个集合的元素组合在一起

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([2, 3, 4]);
const s3 = new Set([3, 4, 5]);
console.log(s1.union(s2).union(s3));  // Set(5) {1, 2, 3, 4, 5}

交集 intersection

A ∩ B 同时属于多个集合中的元素组成的集合

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([2, 3, 4]);
const s3 = new Set([3, 4, 5]);
console.log(s1.intersection(s2).intersection(s3));  // Set(1) {3}

差集 difference

A \ B 属于第一个集合但不属于第二个集合的元素的集合

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([2, 3, 4]);
const s3 = new Set([3, 4, 5]);
console.log(s1.difference(s2).difference(s3));  // Set(1) {1}

对称差集 symmetricDifference

A △ BA ⊖ B 两个集合中不共有的元素,具体来说,两个集合 A 和 B 的对称差集包含了仅属于 A 或仅属于 B 的元素,但不包含同时属于 A 和 B 的元素 $$ A△B=(A∖B)∪(B∖A) $$

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([2, 3, 4]);
const s3 = new Set([3, 4, 5]);
console.log(s1.symmetricDifference(s2).symmetricDifference(s3));  // Set(3) {1, 3, 5}

子集检测 isSubsetOf

A ⊆ B 检测前者是否是后者的子集

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([2, 3]);
console.log(s2.isSubsetOf(s1));  // true

父集检测 isSupersetOf

A ⊇ B 检测前者是否是后者的父集

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([2, 3]);
console.log(s1.isSupersetOf(s2));  // true

不相交检测 isDisjointFrom

A ∩ B = ∅ 确定两个集合是否是不相交,即没有共同的元素

js
const s1 = new Set([1, 2, 3]);
const s2 = new Set([4]);
console.log(s1.isDisjointFrom(s2));  // true