注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。
在 TypeScript 中,Set
是一个内置对象,用于存储任何类型的唯一值,确保不允许重复值。
这是 TypeScript Set 的一个简单示例。您可以阅读本教程的其余部分以了解更多信息。
示例
// Create a new Set that only holds numbers
const numbers = new Set<number>();
// Add items to the Set
numbers.add(1);
numbers.add(2);
numbers.add(1); // Duplicate, will be ignored
console.log(numbers);
// Output: Set(2) { 1, 2 }
在这里,我们创建了一个 Set
来存储数字。请注意,重复的 1 被忽略了,因为 Set
只存储唯一值。
创建 TypeScript Set
在 TypeScript 中,您可以使用 new Set()
构造函数来创建 Set。您还可以使用泛型指定它将保存的元素类型。
// Create an empty Set of numbers
const set1 = new Set<number>();
console.log(set1);
输出
Set(0) {}
在这里,我们创建了一个空集合。您可以在创建时直接将值插入集合中,如下所示:
const set1 = new Set<number>([10, 20, 30]);
console.log(set1); // Output: Set(3) { 10, 20, 30 }
常见问题
您还可以通过使用泛型指定类型来创建仅包含 字符串
或 any
类型值的 Set
。
例如,
// Create a Set of strings
const stringSet = new Set<string>(["apple", "banana", "cherry"]);
console.log(stringSet);
// Create a Set of any type (mixed types)
const anySet = new Set<any>([1, "hello", { count: true }]);
console.log(anySet);
输出
Set(3) { 'apple', 'banana', 'cherry' } Set(3) { 1, 'hello', { count: true } }
添加新元素
您可以使用 add()
方法将元素添加到 Set
中。例如:
const set1 = new Set<number>([10, 20,30]);
set1.add(40);
set1.add(50);
set1.add(20);
console.log(set1);
输出
Set(5) { 10, 20, 30, 40, 50 }
在这里,我们将元素 40 和 50 添加到了 Set
中。
请注意,我们尝试添加重复值 20,但它被忽略了,因为 Set
只存储唯一值。
访问 Set 元素
您可以使用 values()
方法访问 Set
元素,并使用 has()
方法检查元素是否存在。例如:
const set1 = new Set<number>([1, 2, 3]);
// Access the elements of a Set
console.log(set1.values());
// Check if an element exists in the Set
console.log(set1.has(1));
输出
[Set Iterator] { 1, 2, 3 } true
删除元素
您可以使用 delete()
方法删除元素,或使用 clear()
方法清除整个 Set
。例如:
const set1 = new Set<number>([1, 2, 3]);
// Remove a specific element
set1.delete(2);
console.log(set1.values()); // [Set Iterator] { 1, 3 }
// Remove all elements
set1.clear();
console.log(set1.values()); // [Set Iterator] { }
输出
[Set Iterator] { 1, 3 } [Set Iterator] { }
遍历 Sets
您可以使用 for...of
循环或 forEach()
方法来遍历 Set
。让我们看一个使用 for...of
循环的示例。
const set1 = new Set<number>([1, 2, 3]);
// Loop through the Set
for (let value of set1) {
console.log(value);
}
输出
1 2 3
TypeScript WeakSet
WeakSet
类似于 Set
,但它只能包含对象类型——不允许数字和字符串等原始类型。例如:
const weakSet = new WeakSet<object>();
let obj = { message: 'Hi', sendMessage: true };
// Add an object to the WeakSet
weakSet.add(obj);
console.log(weakSet);
输出
WeakSet { <items unknown> }
输出 WeakSet { <items unknown> }
是正常的——TypeScript(或 JavaScript)隐藏了 WeakSet
的内容以支持内存管理,因为它的项可以被垃圾回收。
WeakSet 方法
方法 | 描述 |
---|---|
add(value) |
将对象添加到 WeakSet |
delete(value) |
删除对象 |
has(value) |
检查对象是否存在 |
WeakSets 不可迭代,也没有 size()
、keys()
或 values()
方法。
主要区别:Set vs. WeakSet
功能 | 集合 | WeakSet |
---|---|---|
数据类型 | 任何类型(字符串、数字、对象) | 仅对象 |
可迭代? | 是 | 否 |
方法 | add() 、delete() 、has() 、clear() 等 |
仅 add() 、delete() 、has() |
另请阅读