Skip to content

TypeScript Map 对象

Map 是 ES6 中引入的一种新的数据结构,它类似于对象(Object),也是键值对的集合。但与普通对象相比,Map 提供了更强大和灵活的功能,尤其是在键的类型上。

在 TypeScript 中使用 Map,可以结合泛型来指定键(Key)和值(Value)的类型,从而获得完整的类型安全支持。

创建 Map

你可以使用 new Map() 构造函数来创建一个新的 Map。你可以指定键和值的类型。

typescript
// 创建一个键为 string 类型,值为 number 类型的 Map
let studentScores = new Map<string, number>();

你也可以在创建时直接初始化数据,通过一个包含键值对的数组(例如元组数组)。

typescript
let initialScores: [string, number][] = [["Alice", 95], ["Bob", 88], ["Charlie", 100]];
let studentScores = new Map<string, number>(initialScores);

Map 的主要特性

  1. 任意类型的键: 普通对象的键只能是字符串或 Symbol。而 Map 的键可以是任意类型的值,包括函数、对象或任何基本类型。
  2. 有序性: Map 中的元素是按插入顺序排列的。当你遍历 Map 时,会按照元素被添加的顺序进行。
  3. size 属性: Map 直接提供 size 属性来获取键值对的数量,比计算对象属性个数更高效。
  4. 易于迭代: Map 原生支持迭代,可以直接与 for...of 循环配合使用。

Map 的常用方法和属性

set(key, value)

Map 中添加或更新一个键值对。返回 Map 对象本身,因此可以链式调用。

typescript
studentScores.set("David", 92);
studentScores.set("Alice", 98); // 更新 Alice 的分数

console.log(studentScores);
// Map(4) { 'Alice' => 98, 'Bob' => 88, 'Charlie' => 100, 'David' => 92 }

get(key)

获取指定键对应的值。如果键不存在,则返回 undefined

typescript
let bobScore = studentScores.get("Bob");
console.log(bobScore); // 88

let eveScore = studentScores.get("Eve");
console.log(eveScore); // undefined

has(key)

检查 Map 中是否存在指定的键,返回一个布尔值。

typescript
console.log(studentScores.has("Charlie")); // true
console.log(studentScores.has("Frank")); // false

delete(key)

删除指定的键值对。如果成功删除,返回 true;否则返回 false

typescript
let didDelete = studentScores.delete("Bob");
console.log(didDelete); // true
console.log(studentScores.has("Bob")); // false

clear()

清空 Map,移除所有的键值对。

typescript
studentScores.clear();
console.log(studentScores.size); // 0

size 属性

返回 Map 中的键值对数量。

typescript
// 重新添加数据
studentScores.set("Anna", 99);
studentScores.set("Ben", 91);
console.log(studentScores.size); // 2

遍历 Map

Map 提供了多种遍历方式。

使用 for...of 循环

这是最常用的遍历方式。

typescript
for (let [key, value] of studentScores) {
    console.log(`${key}'s score is ${value}`);
}
// Anna's score is 99
// Ben's score is 91

使用 forEach() 方法

typescript
studentScores.forEach((value, key) => {
    console.log(`${key}: ${value}`);
});

遍历键或值

  • keys(): 返回一个包含所有键的迭代器。
  • values(): 返回一个包含所有值的迭代器。
  • entries(): 返回一个包含所有 [key, value] 对的迭代器(for...of 内部就是使用这个)。
typescript
// 遍历键
for (let key of studentScores.keys()) {
    console.log(key);
} // Anna, Ben

// 遍历值
for (let value of studentScores.values()) {
    console.log(value);
} // 99, 91

本站内容仅供学习和研究使用。