map的entries()返回迭代器而非数组,需用[...map.entries()]或array.from(map.entries())转为二维数组;keys()和values()同理转为一维数组。

Map 的 entries() 方法本身返回的是一个可迭代对象(Iterator),不是数组,需配合 Array.from() 或扩展运算符 [...] 才能得到二维数组。
entries() 返回值的本质
map.entries() 返回一个迭代器,每次调用 .next() 会产出一个形如 { value: [key, value], done: false } 的对象。它不支持数组方法(如 map、filter),也不能直接索引或遍历(除非用 for...of)。
转成二维数组的两种常用方式
-
用扩展运算符(推荐,简洁直观):
const arr = [...map.entries()];
例如:const m = new Map([['a', 1], ['b', 2]]);<br> console.log([...m.entries()]); // [['a', 1], ['b', 2]] -
用 Array.from(语义更明确):
const arr = Array.from(map.entries());
效果完全等同,适合需要兼容旧环境或强调“从可迭代对象构造数组”的场景。
注意点:不是所有“类数组”都能直接展开
如果 Map 中的 key 或 value 本身是对象、函数或 Symbol,二维数组里对应项仍是原引用,不会深拷贝。
另外,entries 的顺序严格遵循 Map 的插入顺序,这点和 Object.keys() 不同——后者在 ES2015+ 虽也保持插入顺序,但对数字键有特殊排序规则。
顺带一提:keys() 和 values() 也能转数组
类似地:[...map.keys()] → 一维数组,含所有 key[...map.values()] → 一维数组,含所有 value
它们和 entries() 一样,都返回迭代器,转换逻辑一致。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











