javascript中map对象原生支持可迭代协议,可用for...of、扩展运算符等遍历,默认返回[key, value]键值对;还提供keys()、values()、entries()三个专用迭代器方法;可转为数组后配合map、filter等处理,但foreach不支持中断和链式操作。

JavaScript 中的 Map 对象支持多种迭代方式,核心是它原生实现了可迭代协议([Symbol.iterator]),因此能直接用 for...of、扩展运算符、解构等语法遍历。
用 for...of 遍历键值对
Map 的默认迭代器返回的是 [key, value] 数组形式的键值对。这是最常用、语义最清晰的方式:
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 提供了三个专用方法,返回对应类型的迭代器:
-
map.keys():只遍历键,返回MapIterator,可用for...of或转为数组([...map.keys()]) -
map.values():只遍历值 -
map.entries():等价于默认迭代器,显式返回键值对(和for...of map效果一致)
例如:
console.log([...map.keys()]); // ['a', 'b', 'c'] console.log([...map.values()]); // [1, 2, 3] console.log([...map.entries()]); // [['a', 1], ['b', 2], ['c', 3]]
配合数组方法做数据处理
因为迭代器可转为数组,所以能轻松结合 map、filter、reduce 等操作:
// 提取所有大于1的值
const filteredValues = [...map.values()].filter(v => v > 1); // [2, 3]
// 计算所有值的总和
const sum = [...map.values()].reduce((a, b) => a + b, 0); // 6
// 转为普通对象(注意:仅适用于字符串/符号键)
const obj = Object.fromEntries(map); // { a: 1, b: 2, c: 3 }
注意点:不能用 forEach 替代迭代器逻辑
Map.prototype.forEach 是方法,不是迭代器——它不返回新数组,也不支持 break 或 return 提前退出(只能用 throw 模拟中断)。需要控制流程或链式处理时,优先选 for...of 或展开后操作。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











