Map.prototype.entries()返回键值对迭代器,每项为[key, value]数组;可for...of遍历、展开为数组或转对象,每次调用新建独立迭代器且保持插入顺序。

Map.prototype.entries() 返回一个迭代器对象,专门用于遍历 Map 中的键值对,每项是一个 [key, value] 数组。
entries() 返回的是可迭代对象,不是数组
它返回的是 MapIterator,不能直接用数组方法(如 map、forEach),但可以用于 for...of 循环,或展开成数组:
- 用
for...of遍历最常见也最推荐:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
for (const [key, value] of map.entries()) {
console.log(key, value); // 'a' 1 → 'b' 2 → 'c' 3
}
- 也可以显式调用
entries()(因为map[Symbol.iterator] === map.entries,所以for...of map等价于for...of map.entries()); - 想转成数组再操作?可以用展开运算符或
Array.from:
const entriesArray = [...map.entries()]; // → [['a', 1], ['b', 2], ['c', 3]] entriesArray.forEach(([k, v]) => console.log(k, v));
entries() 和 keys()、values() 的关系
三者都是 Map 的迭代方法,返回对应类型的迭代器:
-
map.keys():只遍历键; -
map.values():只遍历值; -
map.entries():同时拿到键和值,最适合需要两者配合的场景(比如构建对象、过滤后重组等)。
实用小技巧:结合解构和条件逻辑
在遍历时可直接解构 + 判断,比如只处理数值型值:
立即学习“Java免费学习笔记(深入)”;
for (const [key, value] of map.entries()) {
if (typeof value === 'number' && value > 1) {
console.log(`Key ${key} has value ${value}`);
}
}
或者生成新对象:
const obj = Object.fromEntries(map.entries());
// → { a: 1, b: 2, c: 3 }
注意点
- entries() 每次调用都返回**新迭代器**,可多次使用,互不影响;
- 遍历顺序严格按插入顺序(Map 保证有序);
- 如果 Map 在遍历中被修改(增删),迭代器行为是“反映最新状态”,但不建议边遍历边改,易出错。


















