TypeScript Set

注意: 如果您是 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 }

常见问题

创建字符串类型和任意类型 Set

您还可以通过使用泛型指定类型来创建仅包含 字符串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 }

在这里,我们将元素 4050 添加到了 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()

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战