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:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
[...map.keys()]→['a', 'b']
-
Array.from(set.values()).filter(x => x.length > 1)
const entries = [...map.entries()]; console.log(entries[0]); // ['a', 1]
手动调用 next() 获取值(少见但有用)
适合需要精确控制遍历节奏的场景,比如分步处理、条件中断:
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
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










