map的keys()、values()、entries()返回懒执行迭代器而非数组,keys()适合键操作,values()用于值统计或校验,entries()支持键值对处理并可转对象;三者均不可重用且无数组方法。

Map 的 keys()、values() 和 entries() 不是数组,而是按插入顺序返回的懒执行迭代器,用对了能省掉不少转换和遍历逻辑。
只处理键时用 keys()
当你只需要操作键本身——比如校验唯一性、生成 ID 列表、或批量删除某些键对应的条目——keys() 最直接。
- 配合
for...of:直接遍历,不创建中间数组 - 转成数组用
Array.from(map.keys())或[...map.keys()],适合后续 filter/sort/map - 注意:返回的是原始键引用,对象或函数作键时仍可准确比对
只关心值时用 values()
统计求和、查找最大值、批量渲染内容、或做纯值校验(如检查是否有空值)时,values() 避免了额外取值步骤。
- 值允许重复,且类型任意;对象值返回的是引用,修改会影响原 Map 中对应项
- 不能靠值反推键,Map 没有内置“值→键”查找能力
- 常用组合:
Array.from(map.values()).reduce((a, b) => a + b, 0)
需要键和值一起处理时首选 entries()
这是最常用的场景,比如转成普通对象、序列化、条件过滤后重构 Map、或生成 HTML 列表。
-
for (const [key, value] of map.entries())解构清晰,语义明确 -
Object.fromEntries(map.entries())一行转对象,比手写循环简洁得多 - 它也是 Map 默认的迭代方法(
map[Symbol.iterator] === map.entries),所以for (const [k, v] of map)等价于用entries()
别踩这些坑
三个方法返回的迭代器都不可重用,也不能响应 Map 后续的增删改;调用一次后再次遍历需重新调用方法。
- 不是数组,没有
forEach、map、filter等方法,要用就先转数组或用for...of - 扩展运算符
[...map.keys()]是语法糖,本质仍是调用迭代器,不是深拷贝 - 如果只是判断是否存在某键/某值,用
map.has(key)或遍历values()前先考虑是否真需要全部取出
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











