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

Map做数据缓存

 

Map 的好处:

  • 键可以是任意类型(包括对象)

  • 保持插入顺序

  • 查找性能优于普通对象(尤其是大量键时)

// 创建缓存
const cache = new Map();// 存入数据
cache.set('user_1', { name: 'Alice', age: 25 });// 读取数据
if (cache.has('user_1')) {const user = cache.get('user_1');console.log(user.name); // Alice
}// 删除缓存
cache.delete('user_1');// 清空所有缓存
cache.clear();

🔧 二、基础方法(常用)

方法 说明 示例
set(key, value) 设置键值对(若 key 已存在则覆盖) map.set('x', 10)
get(key) 获取 key 对应的值,没有则返回 undefined map.get('x')
has(key) 检查是否存在某个键 map.has('x')
delete(key) 删除指定键 map.delete('x')
clear() 清空所有条目 map.clear()
size 获取当前键值对数量 map.size
const cache = new Map();
cache.set('user', { name: 'Alice' });
console.log(cache.get('user')); // { name: 'Alice' }
console.log(cache.has('user')); // true
console.log(cache.size); // 1
cache.delete('user');
cache.clear();

 

三、遍历方法(迭代)

Map可迭代对象,可以用多种方式遍历:

方法 返回内容 示例
keys() 所有键的迭代器 for (const k of map.keys()) console.log(k)
values() 所有值的迭代器 for (const v of map.values()) console.log(v)
entries() 所有 [key, value] 对的迭代器 for (const [k, v] of map.entries()) console.log(k, v)
forEach(callback) 按插入顺序遍历所有项 map.forEach((v, k) => console.log(k, v))
const map = new Map([['a', 1],['b', 2],['c', 3],
]);for (const [key, value] of map) {console.log(key, value); // a 1, b 2, c 3
}map.forEach((value, key) => {console.log(`${key} -> ${value}`);
});

四、与其他数据结构的转换

1️⃣ Map → 数组

const map = new Map([['a', 1], ['b', 2]]);
const arr = Array.from(map); // [['a', 1], ['b', 2]]
const keys = [...map.keys()];   // ['a', 'b']
const values = [...map.values()]; // [1, 2]

2️⃣ 数组 → Map

const arr = [['x', 100], ['y', 200]];
const map = new Map(arr);

3️⃣ Map → 对象

 
const map = new Map([['a', 1], ['b', 2]]);
const obj = Object.fromEntries(map); // { a: 1, b: 2 }

4️⃣ 对象 → Map

const obj = { x: 10, y: 20 };
const map = new Map(Object.entries(obj));

五、键的类型

Map 的 key 可以是任意类型(包括对象、函数、NaN):

const map = new Map();
const objKey = { id: 1 };
const fnKey = () => {};
const nanKey = NaN;map.set(objKey, 'Object key');
map.set(fnKey, 'Function key');
map.set(nanKey, 'NaN key');console.log(map.get(objKey)); // 'Object key'
console.log(map.get(NaN)); // 'NaN key' ✅

注意:Map 用的是 SameValueZero 比较规则,
所以 NaN 被认为等于 NaN+0 等于 -0

 

六、Map 与 WeakMap 的区别

特性 Map WeakMap
键类型 任意 只能是对象
是否可枚举 ✅ 可以遍历 ❌ 不能遍历
自动垃圾回收 ❌ 不会 ✅ 会(若键对象被回收)
典型用途 一般缓存、映射表 绑定对象的私有数据
const weakCache = new WeakMap();
let obj = {};
weakCache.set(obj, 'data');
obj = null; // obj 被回收,WeakMap 自动清理对应数据

七、总结速查表

方法 / 属性 描述
new Map([iterable]) 创建新 Map
.set(key, value) 设置键值对
.get(key) 获取值
.has(key) 检查键是否存在
.delete(key) 删除某项
.clear() 清空所有项
.size 当前元素数量
.keys() 返回键的迭代器
.values() 返回值的迭代器
.entries() 返回 [key, value] 迭代器
.forEach(fn) 遍历 Map

 

http://www.gsyq.cn/news/20778.html

相关文章:

  • Python基于 Gradio 和 SQLite 开发的简单博客管理平台,承受局域网手机查看,给一个PC和手机 互联方式
  • 2025 年工业表面处理领域喷砂机厂家最新推荐排行榜,涵盖智能自动化可移动等类型设备优质厂家
  • 2025 年化妆品代工厂最新推荐排行榜:OEM/ODM/ 私人定制等服务优选企业指南
  • go-基于 Prometheus 的全方位食用手册 - fox
  • picard标记DI/DS标签
  • 2025 年南昌装修公司推荐南昌市宿然装饰工程有限公司,以专业与真诚雕琢理想空间南昌装修设计推荐指南!
  • 2025 年国内模切加工源头厂家最新推荐排行榜:聚焦 0.1mm 精度与高产能标杆,为下游企业精选优质合作商电子辅料/硅胶/薄膜/胶黏/绝缘模切加工厂家推荐
  • 直播协议详解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP 的区别
  • 2025 年水下打捞公司服务推荐榜:水下打捞手机/水下打捞黄金/水下打捞戒指/水下打捞沉船/水下打捞转头,聚焦专业与高效,助力解决各类水下应急需求
  • 【光照】UnityURP渲染中的HDR
  • 在jupyter notebook中使用自己创建的conda虚拟环境的Python内核
  • Flutter顶部状态栏显示,安全区设置等,防止各种异性屏挡住应用操作栏
  • 实用指南:JavaWeb-Ajax、监听器、过滤器及对应案例和jstl补充
  • 从孔子到马斯克:理解原理与问对问题的智慧史
  • 2025 年电感源头厂家最新推荐排行榜:聚焦功率一体成型屏蔽共模等系列,助力企业精准选优质制造商屏蔽/共模/贴片共模/磁环/磁胶SWPA电感厂家推荐
  • 工业流体输送 “心” 选择!2025 螺杆泵、隔膜泵、磁力泵、自吸泵、计量泵五大靠谱厂家推荐 —— 从研发实力到售后保障的全方位筛选
  • 如何用有限元法,分析物体表面的张力?
  • 2025 年最新切割机厂家口碑推荐排行榜:全包围 / 半包围激光切割机及金属等离子切割机优选企业指南
  • 第1章:初识 Coze 优秀的平台
  • 2025 年国内变压器优质厂家最新推荐排行榜:聚焦低压/单相/三相/特种/定制/非标/配电/节能/光伏/隔离变压器设备,助力用户精准选靠谱品牌
  • 国产项目管理工具突围战:Gitee如何成为本土开发者的效率引擎
  • 基于Saleh模型的功率放大器参数辨识与曲线拟合
  • 【2025精选】如何选择跨网文件传输系统?5大核心指标要关注
  • 飞牛nas,小白,免费,远程方案,远程看电视,远程观影
  • 安卓Shell脚本
  • 基于多尺度谱峭度的有载分接开关振动信号处理
  • Gitee崛起:本土化战略如何重塑中国开发者生态?
  • Rancher 社区双周报| Longhorn v1.10.0 重磅发布,企业级存储性能全面升级
  • V-Ray 6.1 插件安装指南|Revit 2019-2024 图文教程
  • 2025 年国内球墨铸铁管厂家最新推荐排行榜:涵盖市政 / 给水 / 水利工程用管,助力采购高效选材