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

JavaScript 中 “new Map()”的使用

new Map() 是 JavaScript 中用于创建 Map 对象 的构造函数。Map 是一种键值对集合,类似于普通对象(Object),但有以下区别:


1. Map 的特点

1.1 键的类型
  • Map:键可以是任意类型(包括对象、函数、基本类型等)。
  • Object:键只能是字符串或 Symbol。
1.2 顺序
  • Map:键值对按照插入顺序排列。
  • Object:键的顺序不一定与插入顺序一致。
1.3 大小
  • Map:可以通过 size 属性直接获取键值对的数量。
  • Object:需要手动计算键的数量。
1.4 性能
  • Map:在频繁增删键值对的场景下,性能优于 Object
  • Object:在静态键值对的场景下,性能优于 Map

2. Map 的基本用法

2.1 创建 Map
const map = new Map();
2.2 添加键值对

使用 set(key, value) 方法添加键值对。

map.set('name', 'Alice');
map.set(1, 'One');
map.set({ key: 'obj' }, 'This is an object');
2.3 获取值

使用 get(key) 方法获取值。

console.log(map.get('name')); // 输出: "Alice"
console.log(map.get(1)); // 输出: "One"
2.4 检查键是否存在

使用 has(key) 方法检查键是否存在。

console.log(map.has('name')); // 输出: true
console.log(map.has('age')); // 输出: false
2.5 删除键值对

使用 delete(key) 方法删除键值对。

map.delete('name');
console.log(map.has('name')); // 输出: false
2.6 获取键值对数量

使用 size 属性获取键值对数量。

console.log(map.size); // 输出: 2
2.7 清空 Map

使用 clear() 方法清空所有键值对。

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

3. 遍历 Map

3.1 遍历键

使用 keys() 方法获取所有键。

for (const key of map.keys()) {
  console.log(key);
}
3.2 遍历值

使用 values() 方法获取所有值。

for (const value of map.values()) {
  console.log(value);
}
3.3 遍历键值对

使用 entries() 方法获取所有键值对。

for (const [key, value] of map.entries()) {
  console.log(`${key}: ${value}`);
}
3.4 使用 forEach 遍历
map.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});

4. Map 的常见使用场景

4.1 存储复杂键

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

const objKey = { id: 1 };
const funcKey = () => {};

const map = new Map();
map.set(objKey, 'This is an object key');
map.set(funcKey, 'This is a function key');

console.log(map.get(objKey)); // 输出: "This is an object key"
console.log(map.get(funcKey)); // 输出: "This is a function key"
4.2 维护插入顺序

当需要维护键值对的插入顺序时,Map 是更好的选择。

const map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);

for (const [key, value] of map) {
  console.log(`${key}: ${value}`);
}
// 输出:
// a: 1
// b: 2
// c: 3
4.3 缓存数据

Map 可以用于缓存数据,键可以是任意类型。

const cache = new Map();

function getData(key) {
  if (cache.has(key)) {
    return cache.get(key);
  }
  const data = fetchDataFromServer(key); // 假设从服务器获取数据
  cache.set(key, data);
  return data;
}

5. Map 与 Object 的对比

特性MapObject
键的类型任意类型字符串或 Symbol
键的顺序插入顺序不一定
大小通过 size 属性获取需要手动计算
性能频繁增删时性能更好静态键值对时性能更好
默认键有原型链上的默认键

6. 总结

  • new Map() 用于创建键值对集合,支持任意类型的键,并维护插入顺序。
  • 适用场景
    • 需要复杂键(如对象、函数)。
    • 需要维护插入顺序。
    • 需要频繁增删键值对。

相关文章:

  • AI语音聊天机器人APP(使用webrtc、语音识别、TTL、langchain、大语语模型、uniapp)
  • 用坦克比喻理解类的封装性
  • 二叉树的层序遍历||(107)
  • 用 pytorch 从零开始创建大语言模型(六):对分类进行微调
  • C++中,构造函数和析构函数
  • 初识HTTP
  • 一维前缀和与二维前缀和的详细用法和介绍
  • 局域网设备访问虚拟机 挂载NFS
  • 算法刷题记录——LeetCode篇(7) [第601~700题](持续更新)
  • dify创建第一个Agent
  • cmakelist中添加opencv
  • 【css酷炫效果】纯CSS实现科技感网格背景
  • 基于ros2与moveit2开发的yolo识别抓取虚拟机械臂
  • 开源模型:加速构建智能生态,引领人工智能新未来
  • Linux系统管理与编程07:任务驱动综合应用
  • 【鸿蒙开发】Hi3861学习笔记- UDP客户端
  • 第十六届蓝桥杯康复训练--6
  • C语言入门教程100讲(7)类型转换
  • 【算法学习计划】动态规划 -- 背包问题(01背包和完全背包)
  • git工作区、暂存区、本地仓库、远程仓库的区别和联系
  • 河南信阳拟发文严控预售许可条件:新出让土地开发的商品房一律现房销售
  • 海北州委常委、常务副州长桑本履新青海省供销社理事会主任
  • 巫蛊:文化的历史暗流
  • 河南洛阳新安县煤渣倾倒耕地:多年难恢复,为何至今未解决?
  • 欧阳娜娜担任江西吉安文化旅游大使
  • 1至4月全国铁路完成固定资产投资1947亿元,同比增长5.3%