JavaScript 中的 Set 对象是一个包含唯一值的集合。每个值在一个 Set 中只能出现一次。Set 可以存储任何数据类型的值。Set 被引入到 JavaScript 中是在 ECMAScript 6(ES6)版本。
JavaScript 中的 Set 类似于数组,但是有几个关键的区别:
-
Set 只能存储唯一的值,而数组可以包含重复的值。
-
-
-
JavaScript 中的 Set 常用来存储唯一的值,例如,用来记录访问过网站的独特用户。它们也可以用来从数组中去除重复的值。
语法
用户可以通过下面的语法来定义一个 Set:
let set1 = new Set([iterable]);
在上面的语法中,我们使用了带有 new
关键字的 Set()
构造函数来定义一个 Set。
参数
-
iterable
- 可选参数。Set()
构造函数遍历可迭代对象的元素,并用这些元素创建一个新的 Set。
示例
示例 (访问 Set 元素)
在下面的例子中,我们将包含重复元素的数组作为 Set()
构造函数的参数。num_set
只包含唯一的值。
我们使用了 values()
方法获取 Set 值的迭代器。为了遍历这个迭代器,我们使用了 for...of
循环。在循环中,我们访问并打印元素。你可以观察到即使输入数组包含重复元素,Set 也只包含唯一的值。
<html>
<body>
<p>The set elements are: </p>
<p id="output"></p>
<script>
const num_set = new Set([10, 20, 20, 20]);
for (let value of num_set.values()) {
document.getElementById("output").innerHTML += value + "<br> ";
}
</script>
</body>
</html>
输出:
The set elements are:
10
20
示例 (向 Set 中插入元素)
用户可以使用 add()
方法将元素插入到 Set 中。在此例中,我们创建了一个空 Set。然后,我们三次使用 add()
方法来将 60、50、50 添加到 Set 中。
虽然我们两次插入了 50,但是由于 Set 只包含唯一的值,所以它只保留一次。
<html>
<body>
<p>Set elements after adding element/s to it: </p>
<div id="output"> </div>
<script>
const num_set = new Set();
num_set.add(60);
num_set.add(50);
num_set.add(50);
for (let value of num_set.values()) {
document.getElementById("output").innerHTML += value + "<br> ";
}
</script>
</body>
</html>
输出:
Set elements after adding element/s to it:
60
50
示例 (从 Set 中移除元素)
Set 的 delete()
方法允许你从 Set 中删除元素。在此例中,我们创建了一个包含不同数字的 Set 并使用 delete()
方法从 Set 中删除了 200 和 400。
<html>
<body>
<p>After deleting elements from the set: </p>
<div id="output"> </div>
<script>
let num_set = new Set([100, 200, 300, 400, 500]);
num_set.delete(200);
num_set.delete(400);
for (let value of num_set.values()) {
document.getElementById("output").innerHTML += value + "<br> ";
}
</script>
</body>
</html>
输出:
After deleting elements from the set:
100
300
500
示例 (检查 Set 是否包含特定值)
下面的例子演示了如何使用 has()
方法来检查 Set 是否包含特定的值。
在此例中,我们检查 Set 是否包含 100,并相应地在输出中打印信息。
<html>
<body>
<p id="output">The set contains 100?: </p>
<script>
const num_set = new Set([100, 200, 300, 400, 500]);
document.getElementById("output").innerHTML += num_set.has(100);
</script>
</body>
</html>
输出:
The set contains 100?: true
数学集合运算
Set 类没有内置方法来执行数学上的集合运算如并集、交集或集合差。因此,你需要编写自定义的 JavaScript 代码来执行数学运算,如下所示。
示例 (两个集合的并集)
两个集合的并集包含 set1 和 set2 的所有唯一元素。
在下面的例子中,set1 和 set2 包含汽车名称。我们定义了 ‘union’ 集合,并将数组作为参数传递。我们使用扩展运算符来创建包含 set1 和 set2 元素的数组。
<html>
<body>
<p>The Union of set1 and set2 is: </p>
<div id="output"> </div>
<script>
const set1 = new Set(["BMW", "Audi", "TATA"]);
const set2 = new Set(["BMW", "TaTa", "Honda", "Suzuki"]);
const union = new Set([...set1, ...set2]);
for (let value of union.values()) {
document.getElementById("output").innerHTML += value + "<br> ";
}
</script>
</body>
</html>
输出:
The Union of set1 and set2 is:
BMW
Audi
TATA
TaTa
Honda
Suzuki
示例 (两个集合的交集)
两个集合的交集包含存在于 set1 和 set2 中的唯一元素。
在此例中,我们有两个包含汽车名称的集合,并定义了 ‘inter’ 集合来存储存在于两个集合中的集合元素。
我们遍历 set1 的元素,在循环内部使用 has()
方法来检查 set1 的元素是否存在于 set2 中。如果是,则将元素添加到 ‘inter’ 集合中。
<html>
<body>
<p>The intersection of set1 and set2 is: </p>
<p id="output"> </p>
<script>
const set1 = new Set(["BMW", "Audi", "TATA"]);
const set2 = new Set(["BMW", "TATA", "Honda", "Suzuki"]);
const inter = new Set();
for (let car of set1) {
if (set2.has(car)) {
inter.add(car);
}
}
for (let value of inter.values()) {
document.getElementById("output").innerHTML += value + "<br> ";
}
</script>
</body>
</html>
输出:
The intersection of set1 and set2 is:
BMW
TATA
示例 (两个集合的差集)
set1 和 set2 的差集包含 set1 中存在但不在 set2 中的所有元素。
我们创建了一个名为 ‘diff’ 的新集合,并用 ‘set1’ 的元素初始化它。之后,我们遍历 set2 的元素。如果 set2 的任何元素存在于 ‘diff’ 集合中,则删除它。
<html>
<body>
<p>The difference of set1 and set2 is: </p>
<div id="output"> </div>
<script>
const set1 = new Set(["BMW", "Audi", "TATA"]);
const set2 = new Set(["BMW", "TATA", "Honda", "Suzuki"]);
const diff = new Set(set1);
for (let car of set2) {
diff.delete(car);
}
for (let value of diff.values()) {
document.getElementById("output").innerHTML += value + "<br> ";
}
</script>
</body>
</html>
输出:
The difference of set1 and set2 is:
Audi
JavaScript Set 参考
在 JavaScript 中,Set 是一个包含唯一值的集合。换句话说,每个值在一个 Set 中只能出现一次。它提供了添加、移除和检查集合中元素是否存在等方法。以下是 Set 类的属性和方法列表。
JavaScript Set 构造函数
序号 |
名称 & 描述 |
1 |
Set() |
|
创建并返回一个从传入值中生成的唯一值集合。 |
JavaScript Set 属性
序号 |
名称 & 描述 |
1 |
size |
|
返回 Set 的大小。 |
JavaScript Set 方法
序号 |
名称 & 描述 |
1 |
add() |
|
向集合中插入元素。 |
2 |
clear() |
|
移除集合中的所有元素。 |
3 |
delete() |
|
删除集合中的单个元素。 |
4 |
difference() |
|
返回第一个集合中有但第二个集合中没有的元素。 |
5 |
entries() |
|
获取包含所有集合条目的迭代器。 |
6 |
forEach() |
|
对集合中的每个值执行提供的函数一次。 |
7 |
has() |
|
指示具有指定值的元素是否存在。 |
8 |
intersection() |
|
返回两个集合中的共有元素。 |
9 |
keys() |
|
此方法等同于 values() 方法。 |
10 |
values() |
|
返回包含集合对象中每个元素值的新 Set 迭代器对象。 |