Skip to main content

7个 Set 的新方法

前几天 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 的交集

intersection

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 的并集

union

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 的差集,结果会根据调用者而变化。

difference

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 的差集并集,因为先计算差集的原因,结果顺序会根据调用者而变化。

symmetricDifference

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。

isSubsetOf

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 相反。

isSupersetOf

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。

isDisjointFrom

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