当前位置: 首页 > news >正文

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 更适合键是复杂类型、需要保持插入顺序或频繁增删键值对的场景。

相关文章:

  • LeetCode 112. 路径总和 II java题解
  • CSS的学习
  • QuickAPI 和 DBAPI 谁更香?SQL生成API工具的硬核对比(一)
  • 学习路之TP6 --重写vendor目录下的文件(新建命令)
  • CODESYS RTE之安装及使用的注意事项
  • MySQL创建存储过程报错
  • G-Star 公益行起航,挥动开源技术点亮公益!
  • Java --- 根据身份证号计算年龄
  • 【CXX】6.1 String — rust::String
  • 鸿蒙app 开发 高效的 存储 数据 推荐使用 @tencent/mmkv(V2.1.0):
  • JavaScript语言的区块链隐私
  • 【经验分享】SpringBoot集成Websocket开发 之 使用由 Jakarta EE 规范提供的 API开发
  • READ-COMMITTED事务隔离级别下的先插后查问题记录
  • 谷歌Gemini 2.0 Flash放出原生多模态图像生成功能:支持多轮对话式实时编辑,附最新尝鲜方式
  • 【算法】DFS、BFS、拓扑排序
  • Unity引擎架构介绍及代码示例
  • 网络安全设备系统集成方案 系统集成和网络安全
  • petalinux环境下给linux-xlnx源码打补丁
  • 重学vue3:vue3组件通信的几种方法
  • OpenAI新工具助力开发者:AI智能体自动任务创建的艺术
  • 湖南省和城乡住房建设厅网站/seo网站推广计划
  • 长沙小学网站建设/百度关键词seo排名
  • 手机网站Com/baidu百度网盘
  • 到那里找做网站的兼职/百度自己的宣传广告
  • 微商做图王官方网站/域名注册服务商
  • 潍坊网站建设最新报价/重庆网站建设软件