如何用 keys 与 values 分别提取 Map 的所有键或所有值

Map.keys()和Map.values()返回迭代器而非数组,需用[...map.keys()]或Array.from()转数组才能调用map、forEach等方法;遍历顺序严格等于插入顺序;for...of可直接遍历迭代器,性能更优。Map.keys() 和 Map.values() 返回的是迭代器,不是数组直接对 Map.keys() 或 Map.values() 调用 .map()、.forEach() 会报错,因为它们返回的是 MapIterator,不是 Array。常见错误现象是:TypeError: map is not a function 或 undefined is not a function。必须显式转成数组才能用数组方法:用 [...map.keys()] 展开为数组(推荐,简洁)用 Array.from(map.keys())(兼容旧环境,但稍冗长)避免 map.keys().toArray() ------ 这个方法根本不存在提取键或值时,顺序始终与插入顺序一致Map 保证遍历顺序 = 插入顺序,所以 map.keys() 和 map.values() 的迭代结果严格对应。这点和普通对象的 Object.keys() 不同(后者在 ES2015 前无序,现在虽多数有序但不保证)。使用场景举例:需要按添加顺序还原配置项名,或做「最近写入优先」的缓存清理 ------ 直接用 [...map.keys()].pop() 就能拿到最后插入的键。插入顺序即遍历顺序,无需额外排序删除某键后,后续键的遍历位置不会"前移"------Map 是链表结构,不是稀疏数组如果依赖顺序做逻辑,别用 Object 替代 Map,否则在 Node.js 12 以下或某些 Safari 版本可能出错values() 提取的是值的引用,不是拷贝如果 Map 存的是对象、数组等引用类型,map.values() 返回的迭代器产生的每个值,都指向原对象的同一内存地址。修改其中一个,会影响 Map 内部存储的值。 文心快码 文心快码(Comate)是百度推出的一款AI辅助编程工具

相关推荐
天天进步20151 小时前
Python全栈项目实战:基于深度学习的语音合成(TTS)系统
开发语言·python·深度学习
qq_254674411 小时前
Ubuntu 国内源配置方法
python
2301_815901971 小时前
MySQL从库同步速度慢的硬件原因_分析磁盘性能与内存占用
jvm·数据库·python
2401_846339561 小时前
SQL如何检测分组内是否存在满足条件的数据_EXISTS结合分组
jvm·数据库·python
iAm_Ike1 小时前
Bootstrap中常用的文本颜色、背景颜色及边框色类
jvm·数据库·python
hjhcos2 小时前
【pgsql】Ubuntu备份和清理数据库postgresql
数据库·ubuntu·postgresql
m0_741481782 小时前
CSS如何实现单选按钮自定义样式_利用伪元素隐藏默认UI
jvm·数据库·python
yexuhgu2 小时前
CSS如何解决Bootstrap表格溢出问题_利用table-responsive容器
jvm·数据库·python
2301_787312432 小时前
SQL视图与存储过程有何区别_架构设计中的选择策略
jvm·数据库·python