JavaScript Set

JavaScript 的 Set(集合)是一组唯一值的集合。

每个值只能在 Set 中出现一次。

Set 可以容纳任何数据类型的值。

Set 方法

方法 描述
new Set() 创建新的 Set。
add() 向 Set 中添加新元素。
delete() 从 Set 中移除元素。
has() 如果值存在则返回 true。
clear() 从 Set 中移除所有元素。
forEach() 为每个元素调用回调函数。
values() 返回包含 Set 中所有值的迭代器。
keys() 与 values() 相同。
entries() 返回迭代器,其中包含 Set 中的 [value,value] 值值对。
属性 描述
size 返回 Set 中元素的数量。

如何创建 Set

您可以通过以下方式创建 JavaScript Set:

  • 将数组传递给 new Set()
  • 创建一个新的 Set,然后使用 add() 方法添加值
  • 创建一个新的 Set,然后使用 add() 方法添加变量

新的 Set() 方法

例子 1

将数组传递给新的 Set() 构造函数:

// 创建 Set
const letters = new Set(["a","b","c"]);

亲自试一试

例子 2

创建一个 Set 并添加字面量值:

// 创建 Set
const letters = new Set();

// 将值添加到 Set
letters.add("a");
letters.add("b");
letters.add("c");

亲自试一试

例子 3

创建一个 Set 并添加变量:

// 创建变量
const a = "a";
const b = "b";
const c = "c";

// 创建 Set
const letters = new Set();

// 向 Set 添加变量
letters.add(a);
letters.add(b);
letters.add(c);

亲自试一试

add() 方法

例子 1

letters.add("d");
letters.add("e");

亲自试一试

例子 2

如果您添加相等的元素,只有第一个会被保存:

letters.add("a");
letters.add("b");
letters.add("c");
letters.add("c");
letters.add("c");
letters.add("c");
letters.add("c");
letters.add("c");

亲自试一试

forEach() 方法

forEach() 方法为每个 Set 元素调用函数:

实例

// 创建 Set
const letters = new Set(["a","b","c"]);

// 列出所有条目
let text = "";
letters.forEach (function(value) {
  text += value;
})

亲自试一试

values() 方法

例子 1

values() 方法返回包含 Set 中所有值的 Iterator 对象:

letters.values()   // 返回 [object Set Iterator]

亲自试一试

例子 2

现在您可以使用 Iterator 对象访问元素:

// 创建迭代器
const myIterator = letters.values();

// 列出所有值
let text = "";
for (const entry of myIterator) {
  text += entry;
}

亲自试一试

keys() 方法

Set 没有键。

keys() 返回与 values() 相同的结果。

这使得 Set 与 Map 相兼容。

实例

letters.keys()   // 返回 [object Set Iterator]

亲自试一试

entries() 方法

Set 没有键(key)。

entries() 方法返回的是 [value,value] 值值对,而不是 [key,value] 键值对。

这使得 Set 与 Map 兼容:

实例

// 创建迭代器(Iterator)
const myIterator = letters.entries();

// 列出所有条目
let text = "";
for (const entry of myIterator) {
  text += entry;
}

亲自试一试

Set 是对象

对于 Set,typeof 返回 object:

typeof letters;      // 返回 object

亲自试一试

对于 Set,instanceof Set 返回 true:

letters instanceof Set;  // 返回 true

亲自试一试