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

张开发
2026/4/16 20:17:59 15 分钟阅读

分享文章

如何用 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辅助编程工具

更多文章