Set.prototype.difference()

Baseline 2024

Newly available

Since June 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Set 实例的 difference() 方法接受一个集合并返回一个新的集合,其中包含当前集合中存在但给定集合中不存在的所有元素。

语法

js
difference(other)

参数

other

一个 Set 对象,或者类集合对象。

返回值

一个新的 Set 对象,包含存在于当前集合但不存在于 other 中的所有元素。

描述

使用数学记号,差集的定义如下:

A B = { x A x B } A\setminus B = {x\in A\mid x\notin B}

使用维恩图表示:

两个圆重叠的维恩图。A 不与 B 重叠的区域是 A 和 B 的差集。

difference() 接受类集合对象作为 other 参数。方法要求 this 是一个 Set 实例,因为它直接检索存储在其中的底层数据,而不调用任何用户代码。然后,它的行为取决于 thisother 的大小:

  • 如果 this 的元素数量大于 other.size,则通过调用 keys() 方法遍历 other,并使用 this 中所有在 other 中未见过的元素构造一个新的集合。
  • 否则,它会遍历 this 中的元素,并使用 this 中的所有使 other.has(e) 返回假值的元素 e 构造一个新集合。

返回的集合的元素的顺序与 this 相同。

示例

使用 difference()

以下示例计算奇数集(<10)和完全平方集(<10)的差集。其结果是一组不是完全平方数的奇数。

js
const odds = new Set([1, 3, 5, 7, 9]);
const squares = new Set([1, 4, 9]);
console.log(odds.difference(squares)); // Set(3) { 3, 5, 7 }

规范

Specification
Set methods
# sec-set.prototype.difference

浏览器兼容性

BCD tables only load in the browser

参见