在 JavaScript 中,new Map() 是一个用于存储键值对的资料结构。它与普通的 JavaScript 物件({})类似,但提供了更多功能和更灵活的键支持,例如可以使用任何类型的值(物件、函数、基本类型等)作为键。

new Map() 适合用于以下情况:

  • 需要键的类型不限于字串或符号:Map 允许任何值作为键(例如物件、数字等),而普通物件的键会被转换为字串。
  • 需要键值对的插入顺序:Map 保留键值对的插入顺序,而普通物件不一定。
  • 需要高效地查找、插入和删除操作:Map 的这些操作在时间复杂度上通常优于物件。
  • 需要计算键值对数量:Map 提供 size 属性可以直接获取键值对数量,而物件需要手动计算。
  • 以下是一个使用 new Map() 的实例,展示如何利用其特性:

范例:根据物件作为键来储存资料

假设你有多个使用者物件,需要储存与这些使用者相关联的某些资料。

// 创建一个 Map
const user1 = { name: "Alice" };
const user2 = { name: "Bob" };
const user3 = { name: "Charlie" };

const userScores = new Map();

// 将使用者物件作为键
userScores.set(user1, 85);
userScores.set(user2, 92);
userScores.set(user3, 78);

// 获取资料
console.log(userScores.get(user1)); // 85
console.log(userScores.get(user2)); // 92

// 判断是否包含某个键
console.log(userScores.has(user3)); // true

// 删除某个键值对
userScores.delete(user3);
console.log(userScores.has(user3)); // false

// 遍历 Map
for (const [user, score] of userScores) {
console.log(`${user.name}: ${score}`);
}

为什么选择 Map?

  • 如果使用物件作为键,普通物件无法正确处理,因为物件作为键会被转换为 [object Object]。
  • 使用 Map 可以保留插入顺序,并提供高效的操作方法(如 set()、get() 等)。
  • 这使得 Map 成为操作复杂键值对的理想选择。