JavaScript 中的Map

1. 什么是 Map

Map 是一种数据结构,用于存储键值对。它的特点是:

  • 键可以是任意类型的值(包括对象、函数等),而不仅仅是字符串或符号(Symbol)。

  • 键值对的顺序是插入顺序。

  • 提供了丰富的方法来操作键值对。


2. 创建 Map

可以通过 new Map() 创建一个空的 Map,或者传入一个二维数组来初始化 Map

示例:
// 创建一个空的 Map
const map1 = new Map();

// 通过二维数组初始化 Map
const map2 = new Map([
  ["name", "Alice"],
  ["age", 25],
  [1, "One"],
  [{ key: "objKey" }, "Object Value"],
]);

3. Map 的常用方法

(1) set(key, value)

向 Map 中添加或更新一个键值对。

示例:
const map = new Map();
map.set("name", "Alice");
map.set("age", 25);
map.set(1, "One");

console.log(map); // 输出: Map { 'name' => 'Alice', 'age' => 25, 1 => 'One' }

(2) get(key)

根据键获取对应的值。如果键不存在,返回 undefined

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

console.log(map.get("name")); // 输出: Alice
console.log(map.get("gender")); // 输出: undefined

(3) has(key)

判断 Map 中是否存在指定的键。

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

console.log(map.has("name")); // 输出: true
console.log(map.has("gender")); // 输出: false

(4) delete(key)

删除指定键的键值对。如果删除成功,返回 true;如果键不存在,返回 false

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

console.log(map.delete("name")); // 输出: true
console.log(map.delete("gender")); // 输出: false
console.log(map); // 输出: Map { 'age' => 25 }

(5) clear()

清空 Map 中的所有键值对。

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

map.clear();
console.log(map); // 输出: Map {}

(6) size

获取 Map 中键值对的数量。

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

console.log(map.size); // 输出: 2

(7) keys()values()entries()
  • keys():返回一个包含所有键的迭代器。

  • values():返回一个包含所有值的迭代器。

  • entries():返回一个包含所有键值对的迭代器。

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

console.log([...map.keys()]); // 输出: ['name', 'age']
console.log([...map.values()]); // 输出: ['Alice', 25]
console.log([...map.entries()]); // 输出: [['name', 'Alice'], ['age', 25]]

(8) forEach(callback)

遍历 Map 中的每个键值对。

示例:
const map = new Map([
  ["name", "Alice"],
  ["age", 25],
]);

map.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});
// 输出:
// name: Alice
// age: 25

4. Map 与 Object 的区别

特性MapObject
键的类型任意类型(包括对象、函数等)只能是字符串或符号(Symbol
键值对的顺序插入顺序不保证顺序
大小通过 size 属性获取需要手动计算
性能频繁增删键值对时性能更好频繁增删键值对时性能较差
默认键无默认键有原型链上的默认键

5. 使用场景

(1) 键是复杂类型

当键是对象或函数时,Map 是更好的选择。

示例:
const objKey = { key: "objKey" };
const map = new Map();
map.set(objKey, "Object Value");

console.log(map.get(objKey)); // 输出: Object Value
(2) 需要保持插入顺序

Map 会按照插入顺序存储键值对。

示例:
const map = new Map();
map.set("a", 1);
map.set("b", 2);
map.set("c", 3);

console.log([...map.keys()]); // 输出: ['a', 'b', 'c']
(3) 频繁增删键值对

Map 在频繁增删键值对时性能更好。

示例:
const map = new Map();
for (let i = 0; i < 10000; i++) {
  map.set(i, `value${i}`);
}
map.clear(); // 清空 Map

6. 总结

  • Map 是一种键值对的集合,键可以是任意类型。

  • 提供了丰富的方法来操作键值对,如 setgethasdeleteclear 等。

  • 与 Object 相比,Map 更适合键是复杂类型、需要保持插入顺序或频繁增删键值对的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值