Map 和 Set 的 keys()、values()、entries() 方法返回迭代器,需用 for...of、展开运算符、解构或 next() 消费;for...of 最常用;Map.entries() 返回 [key, value],Set.entries() 返回 [value, value]。

Map 和 Set 的 keys()、values()、entries() 方法返回的是迭代器(Iterator),不是数组,不能直接用 forEach 或下标访问,但可以用 for...of、展开运算符、解构或手动调用 next() 来消费。
用 for...of 遍历最常用
这是最直观、推荐的方式,适合大多数场景:
-
Map 的 keys/values/entries:
const map = new Map([['a', 1], ['b', 2]]);<br> for (const key of map.keys()) console.log(key); // 'a', 'b'<br> for (const value of map.values()) console.log(value); // 1, 2<br> for (const [key, value] of map.entries()) console.log(key, value); // 'a' 1, 'b' 2 -
Set 的 keys/values 返回相同结果(都是元素本身):
const set = new Set(['x', 'y']);<br> for (const item of set.values()) console.log(item); // 'x', 'y'<br> for (const item of set.keys()) console.log(item); // 'x', 'y'(和 values 一样)
转成数组再操作
需要数组方法(如 map、filter、索引访问)时,用展开运算符或 Array.from:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
[...map.keys()]→['a', 'b']
-
Array.from(set.values()).filter(x => x.length > 1)
const entries = [...map.entries()]; console.log(entries[0]); // ['a', 1]
手动调用 next() 获取值(少见但有用)
适合需要精确控制遍历节奏的场景,比如分步处理、条件中断:
立即学习“Java免费学习笔记(深入)”;
const iter = map.entries();<br> console.log(iter.next()); // { value: ['a', 1], done: false }<br> console.log(iter.next()); // { value: ['b', 2], done: false }<br> console.log(iter.next()); // { value: undefined, done: true }- 注意:每个迭代器只能遍历一次,再次调用
next()到done: true后,后续都返回{value: undefined, done: true}
entries() 在 Map 和 Set 中的区别
这是容易混淆的一点:
-
Map.prototype.entries() 返回
[key, value]数组组成的迭代器; -
Set.prototype.entries() 返回
[value, value](每个项是[x, x]),兼容 Map 接口,但实际只关心第一个值;for (const [a, b] of new Set([1]).entries()) console.log(a === b); // true

















