最直接的方法是用扩展运算符[...map]或Array.from(map)将Map转为二维键值对数组,二者均保持插入顺序,前者简洁,后者支持映射函数;Object.fromEntries(map)可转为对象。

JavaScript 中将 Map 对象转为标准键值对数组,最直接的方法是使用 Map.prototype.entries() 配合 Array.from() 或扩展运算符 [...map]。
用扩展运算符快速展开
这是最简洁常用的方式,一行就能得到二维数组(每个子数组形如 [key, value]):
const map = new Map([['a', 1], ['b', 2], ['c', 3]]); const arr = [...map]; // 结果:[['a', 1], ['b', 2], ['c', 3]]
- 本质是调用 Map 的默认迭代器,等价于
map.entries() - 返回的是真正的数组,可直接使用
map、filter等方法 - 顺序与 Map 插入顺序一致(Map 保持插入顺序)
用 Array.from() 显式转换
语义更明确,适合需要兼容旧环境或强调“转换”意图的场景:
const arr = Array.from(map); // 同样得到 [['a', 1], ['b', 2], ['c', 3]]
- 支持传入映射函数,一步转成对象数组或自定义结构
- 例如:
Array.from(map, ([k, v]) => ({ key: k, value: v })) - 比扩展运算符稍重,但灵活性更高
如果需要转成普通对象(非数组)
虽然问题问的是“键值对数组”,但常有人混淆为转对象。注意:这不是数组,但顺带说明:
- 不能直接用
Object.fromEntries(map)—— 实际上可以!ES2019 起已支持 -
Object.fromEntries(map)会返回{ a: 1, b: 2, c: 3 } - 前提是 Map 的 key 是字符串、Symbol 或能被安全转为字符串的值
注意事项
- Map 中的 key 可以是任意类型(函数、对象、NaN),但转成数组后仍保留原类型,不受影响
- 若需过滤或处理数据,建议先展开再操作,避免在循环中反复调用
map.entries() - 不要用
Array.from(map.keys())或Array.from(map.values())—— 这得到的是单维数组,不是键值对
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











