js中将map转数组或对象需用其迭代器方法:扩展运算符或array.from()得二维键值数组;keys()/values()配合扩展得一维数组;object.fromentries()转对象,旧环境可用reduce模拟,注意key类型限制与重复覆盖。

JS 中将 Map 转成数组或普通对象,核心是利用它的迭代器方法(entries()、keys()、values())配合解构或 Object.fromEntries()。
转成二维数组([key, value] 形式)
Map 本身是可迭代的,直接用扩展运算符或 Array.from() 即可得到键值对数组:
-
[...myMap]→ 返回[[k1,v1], [k2,v2], ...] -
Array.from(myMap)→ 效果同上,兼容性略好(支持 IE9+)
例如:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
console.log([...map]); // [['a', 1], ['b', 2]]
只取 key 或 value 的一维数组
用 keys() 或 values() 获取对应迭代器,再转数组:
-
[...map.keys()]→['a', 'b'] -
[...map.values()]→[1, 2] -
Array.from(map.keys())同样可用
转成普通对象(Object)
推荐使用 Object.fromEntries(),它专为这种场景设计:
-
Object.fromEntries(map)→{ a: 1, b: 2 } - 注意:key 必须是字符串、Symbol 或数字;若 key 是对象,会调用
toString(),可能意外覆盖(如{}和[]都变成"[object Object]")
不支持 Object.fromEntries() 的旧环境(如 IE),可用 reduce 模拟:
acc[k] = v;
return acc;
}, {});
注意事项
- Map 的 key 可以是任意类型(函数、对象、NaN 等),但普通对象的 key 只能是字符串或 Symbol,转换时非字符串 key 会被隐式转为字符串
-
Object.fromEntries()是 ES2019 新增,现代浏览器和 Node.js 12+ 均支持 - 如果 Map 中有重复字符串 key(比如先后设了
map.set('x', 1)和map.set('x', 2)),后者会覆盖前者,转对象后也只会保留最后一个值










