JavaScript Set 关键字
最后修改于 2025 年 4 月 16 日
在本文中,我们将展示如何使用 JavaScript 中的 Set 对象来处理唯一值的集合。
Set 对象
Set 对象是一个唯一值的集合。它可以存储任何类型的值,无论是基本类型值还是对象引用。每个值在 Set 中只能出现一次。
Sets 类似于数组,但它们不允许重复值。它们提供了添加、删除和检查元素存在的方法。 Sets 保持元素的插入顺序。
当您需要维护唯一项目的集合时,Sets 很有用。与数组相比,它们在某些操作中提供了更好的性能。
创建集合
以下示例演示了如何在 JavaScript 中创建一个 Set。
const mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add('text');
mySet.add({name: 'John'});
console.log(mySet);
我们使用 new Set() 构造函数创建一个新的 Set。我们使用 add() 方法向 Set 添加各种类型的值。 Set 可以包含数字、字符串和对象。
$ node main.js
Set { 1, 5, 'text', { name: 'John' } }
从数组创建 Set
我们可以从一个数组创建一个 Set,它会自动删除重复项。
const numbers = [1, 2, 3, 4, 4, 5, 5, 5]; const uniqueNumbers = new Set(numbers); console.log(uniqueNumbers); console.log([...uniqueNumbers]);
此示例展示了如何从包含重复值的数组创建 Set。Set 会自动删除重复项。我们使用扩展运算符将 Set 转换回数组。
$ node main.js
Set { 1, 2, 3, 4, 5 }
[ 1, 2, 3, 4, 5 ]
检查 Set 的大小和存在性
Sets 提供了检查其大小以及它们是否包含值的方法。
const fruits = new Set(['apple', 'banana', 'orange']);
console.log(fruits.size);
console.log(fruits.has('apple'));
console.log(fruits.has('grape'));
size 属性返回 Set 中元素的数量。has() 方法检查 Set 中是否存在某个值。这两个操作在 Sets 中都非常有效。
$ node main.js 3 true false
从 Set 中删除元素
Sets 提供了删除单个元素或清除所有元素的方法。
const colors = new Set(['red', 'green', 'blue']);
colors.delete('green');
console.log(colors);
colors.clear();
console.log(colors);
delete() 方法从 Set 中删除特定元素。clear() 方法从 Set 中删除所有元素。这两种方法都会就地修改 Set。
$ node main.js
Set { 'red', 'blue' }
Set {}
遍历 Set
Sets 可以使用各种方法进行迭代,类似于数组。
const letters = new Set(['a', 'b', 'c']);
// Using for...of
for (const letter of letters) {
console.log(letter);
}
// Using forEach
letters.forEach(letter => {
console.log(letter);
});
Sets 保持插入顺序,因此迭代遵循添加元素的顺序。我们可以使用 for...of 或 forEach 来遍历 Set。 Sets 是可迭代的对象。
$ node main.js a b c a b c
Set 运算:并集、交集、差集
我们可以执行常见的 Set 运算,例如并集、交集和差集。
const setA = new Set([1, 2, 3]); const setB = new Set([2, 3, 4]); // Union const union = new Set([...setA, ...setB]); console.log(union); // Intersection const intersection = new Set([...setA].filter(x => setB.has(x))); console.log(intersection); // Difference const difference = new Set([...setA].filter(x => !setB.has(x))); console.log(difference);
此示例演示了基本的 Set 运算。并集将两个集合的元素组合在一起。交集找到公共元素。差集找到 setA 中但不在 setB 中的元素。
$ node main.js
Set { 1, 2, 3, 4 }
Set { 2, 3 }
Set { 1 }
实际用例:跟踪唯一访问者
这是一个使用 Set 跟踪唯一网站访问者的实际例子。
const visitors = new Set();
function addVisitor(id) {
visitors.add(id);
console.log(`Total unique visitors: ${visitors.size}`);
}
addVisitor('user1');
addVisitor('user2');
addVisitor('user1'); // Duplicate
addVisitor('user3');
console.log('All visitors:', [...visitors]);
此代码使用 Set 来跟踪唯一的访问者 ID。重复的 ID 会被自动忽略。 size 属性给出了唯一访问者的计数。
$ node main.js Total unique visitors: 1 Total unique visitors: 2 Total unique visitors: 2 Total unique visitors: 3 All visitors: [ 'user1', 'user2', 'user3' ]
来源
在本文中,我们演示了如何使用 Set 对象来处理 JavaScript 中唯一值的集合。