当前位置: 首页 > 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.hskmm.com/?act=detail&tid=30821

相关文章:

  • Python基于 Gradio 和 SQLite 开发的简单博客管理平台,承受局域网手机查看,给一个PC和手机 互联方式
  • RK3576+gc05a2
  • 2025 年工业表面处理领域喷砂机厂家最新推荐排行榜,涵盖智能自动化可移动等类型设备优质厂家
  • 2025.10.14
  • 行列式按多行或列展开
  • 2025 年化妆品代工厂最新推荐排行榜:OEM/ODM/ 私人定制等服务优选企业指南
  • SCANIA中国EDI对接供应商指南:快速完成上线的最佳方案
  • 2025 年模板厂家最新推荐榜单:覆盖塑钢 / 水沟 / 现浇 / 拱形骨架等多类型,精选优质厂家助力工程高效采购
  • RequestldleCallback
  • 前端开发调试实战指南,从浏览器到 WebView 的全链路问题排查思路
  • 基于EKF/UKF的非线性飞行器系统滤波实现
  • go-基于 Prometheus 的全方位食用手册 - fox
  • 实验任务2 - pp
  • 插入公式总是有个框框
  • picard标记DI/DS标签
  • 2025年成都全日制辅导机构优选指南,全日制培训班/集训机构/集训班/全日制一对一培训/文化课集训机构,学习提升新选择
  • 2025 年灭老鼠公司最新推荐排行榜:欧盟认证技术与环保服务双优品牌权威甄选,含成都 / 四川专业机构口碑指南除老鼠/消灭老鼠/老鼠消杀公司推荐
  • uni-app x初探
  • 深度SEO优化的方式有哪些,从技术层面来说
  • 2025 年南昌装修公司推荐南昌市宿然装饰工程有限公司,以专业与真诚雕琢理想空间南昌装修设计推荐指南!
  • C# Avalonia 16- Animation- AnimateRadialGradient
  • ControlNet——AI图像生成的“精准操控工具”
  • 2025 年国内模切加工源头厂家最新推荐排行榜:聚焦 0.1mm 精度与高产能标杆,为下游企业精选优质合作商电子辅料/硅胶/薄膜/胶黏/绝缘模切加工厂家推荐
  • 2025 武汉实缴服务机构最新推荐排行榜:知识产权 / 注册资本代办优选清单,深度解析专业服务品质
  • 华为开发者空间携手乐知行:轻松实现智能网联小车数据可视化系
  • card滑动效果
  • 学习日报
  • 2025年成都一对一培训机构优选榜:成都一对一辅导/补习/培训/补习班/辅导机构推荐,成都美博教育脱颖而出
  • 打印机共享修复,打印机无法共享,打印机修复工具下载及安装教程
  • web中静态资源加载失败的降级处理