摘要:本教程将介绍 JavaScript Set
对象,它允许您有效地管理任何类型唯一值的集合。
JavaScript Set 对象简介
ES6 提供了一种新的类型 Set
,它存储任何类型的唯一值的集合。要创建新的空 Set
,请使用以下语法
let setObject = new Set();
Code language: JavaScript (javascript)
Set
构造函数还接受一个可选的 可迭代对象。如果您将可迭代对象传递给 Set
构造函数,则可迭代对象的所有元素都将添加到新集合中
let setObject = new Set(iterableObject);
Code language: JavaScript (javascript)
有用的 Set 方法
Set
对象提供了以下有用的方法
add(value)
– 将具有指定值的的新元素追加到集合中。它返回Set
对象,因此您可以将此方法与另一个Set
方法链接。clear()
– 从Set
对象中删除所有元素。delete(value)
– 删除由值指定的元素。entries()
– 返回一个新的Iterator
,其中包含[value, value]
的数组。forEach(callback [, thisArg])
– 对Set
的每个元素调用 回调函数,在每次调用中将this
值设置为thisArg
。has(value)
– 如果集合中存在具有给定值的元素,则返回true
,否则返回false
。keys()
– 与values()
函数相同。[@@iterator]
– 返回一个新的Iterator
对象,该对象包含以插入顺序存储的所有元素的值。
JavaScript Set 示例
从数组创建一个新的 Set
以下示例展示了如何从 数组 创建一个新的 Set。
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
Code language: JavaScript (javascript)
集合中的所有元素都必须是唯一的,因此 chars
只包含 3 个不同的元素 a
、b
和 c
。
console.log(chars);
Code language: JavaScript (javascript)
输出
Set { 'a', 'b', 'c' }
Code language: JavaScript (javascript)
当您将 typeof
运算符用于 chars
时,它返回 object
。
console.log(typeof(chars));
Code language: JavaScript (javascript)
输出
object
chars
集合是 Set
类型的实例,因此以下语句返回 true
。
let result = chars instanceof Set;
console.log(result);
Code language: JavaScript (javascript)
获取 Set 的大小
要获取集合保存的元素数量,请使用 Set
对象的 size
属性
let size = chars.size;
console.log(size);// 3
Code language: JavaScript (javascript)
向 Set 添加元素
要向集合添加元素,请使用 add()
方法
chars.add('d');
console.log(chars);
Code language: JavaScript (javascript)
输出
Set { 'a', 'b', 'c', 'd' }
Code language: JavaScript (javascript)
由于 add()
方法是可链接的,因此您可以使用链接语句将多个项目添加到集合中
chars.add('e')
.add('f');
Code language: JavaScript (javascript)
检查 Set 中是否存在某个值
要检查集合中是否存在特定元素,请使用 has()
方法。has()
方法如果集合包含该元素则返回 true
,否则返回 false
。由于 chars
集合包含 'a'
,因此以下语句返回 true
let exist = chars.has('a');
console.log(exist);// true
Code language: JavaScript (javascript)
以下语句返回 false
,因为 chars
集合不包含 'z'
值。
exist = chars.has('z');
console.log(exist); // false
Code language: JavaScript (javascript)
从集合中删除元素
要从集合中删除指定元素,请使用 delete()
方法。以下语句从 chars
集合中删除 'f'
值。
chars.delete('f');
console.log(chars); // Set {"a", "b", "c", "d", "e"}
Code language: JavaScript (javascript)
输出
Set { 'a', 'b', 'c', 'd', 'e' }
Code language: JavaScript (javascript)
delete()
方法返回 true
,表示元素已成功删除。要删除集合中的所有元素,请使用 clear()
方法
chars.clear();
console.log(chars); // Set{}
Code language: JavaScript (javascript)
循环 JavaScript Set 的元素
Set 对象维护其元素的插入顺序,因此,当您遍历其元素时,元素的顺序与插入顺序相同。假设您有一个用户角色集合,如下所示。
let roles = new Set();
roles.add('admin')
.add('editor')
.add('subscriber');
Code language: JavaScript (javascript)
以下示例使用 for…of 循环 遍历 chars 集合。
for (let role of roles) {
console.log(role);
}
Code language: JavaScript (javascript)
输出
admin
editor
subscriber
Set 还提供了 keys()
、values()
和 entries()
方法,类似于 Map。但是,Set 中的键和值是相同的。例如
for (let [key, value] of roles.entries()) {
console.log(key === value);
}
Code language: JavaScript (javascript)
输出
true
true
true
Code language: JavaScript (javascript)
对 Set 的每个元素调用回调函数
如果您想对集合的每个元素调用 回调函数,可以使用 forEach()
方法。
roles.forEach(role => console.log(role.toUpperCase()));
Code language: JavaScript (javascript)
WeakSets
WeakSet
类似于 Set
,除了它只包含对象。由于 WeakSet
中的对象可能会被自动垃圾回收,因此 WeakSet
没有 size
属性。与 WeakMap
一样,您不能迭代 WeakSet
的元素,因此您会发现 WeakSet
在实践中很少使用。事实上,您只使用 WeakSet
来检查指定的值是否在集合中。以下是一个例子
let computer = {type: 'laptop'};
let server = {type: 'server'};
let equipment = new WeakSet([computer, server]);
if (equipment.has(server)) {
console.log('We have a server');
}
Code language: JavaScript (javascript)
输出
We have a server
在本教程中,您学习了 JavaScript Set
对象以及如何操作其元素。