前几天 JavaScript 正式官宣,发布了 7 个 Set 的新方法,分别是:
intersection
: 计算两个 Set 的 交集union
: 计算两个 Set 的 并集difference
: 计算两个 Set 的 差集symmetricDifference
: 取两个 Set 的 差集 的 并集isSubsetOf
: 判断 Set 是否是另一个 Set 的 超集isDisjointFrom
: 判断 Set 是否与另一个 Set 无交集
目前这些方法只能在
Node 22+
、Chrome/Edge 122+
、Firefox 127+
、Safari 17+
中使用
intersection
这个方法用于取两个 Set 的交集。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
console.log(s1.intersection(s2))
// Set(2) { 3, 'apple' }
union
这个方法用于取两个 Set 的并集。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
console.log(s1.union(s2))
// Set(5) { 1, 2, 3, 'apple', 4 }
difference
这个方法用于取两个 Set 的差集,结果会根据调用者而变化。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
// s1 相对于 s2 的差 集
console.log(s1.difference(s2))
// Set(2) { 1, 2 }
// s2 相对于 s1 的差集
console.log(s2.difference(s1))
// Set(1) { 4 }
symmetricDifference
这个方法用于取两个 Set 的差集的并集,因为先计算差集的原因,结果顺序会根据调用者而变化。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
console.log(s1.symmetricDifference(s2))
// Set(3) { 1, 2, 4 }
console.log(s2.symmetricDifference(s1))
// Set(3) { 4, 1, 2 }
isSubsetOf
这个方法判断 Set 是否是另一个 Set 的子集,是的话返回 true,否则返回 false。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
const s3 = new Set([3, 'apple'])
console.log(s2.isSubsetOf(s1))
// false
console.log(s3.isSubsetOf(s1))
// true
isSupersetOf
这个方法判断 Set 是否是另一个 Set 的超集,是的话返回 true,否则返回 false,跟 isSubsetOf 相反。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
const s3 = new Set([3, 'apple'])
console.log(s1.isSupersetOf(s2))
// false
console.log(s1.isSupersetOf(s3))
// true
isDisjointFrom
这个方法判断 Set 是否与另一个 Set无交集,是的话返回 true,否则返回 false。
const s1 = new Set([1, 2, 3, 'apple'])
const s2 = new Set([3, 4, 'apple'])
const s3 = new Set([5, 'peach'])
console.log(s1.isDisjointFrom(s2))
// false
console.log(s1.isDisjointFrom(s3))
// true