object.fromentries(map)是最简洁标准的转换方法;它直接将map转为对象,支持任意类型key(非字符串/符号key会隐式转为字符串),一行代码无副作用,es2019标准,现代环境原生支持。

Map 不能直接用扩展运算符({...map})转成普通对象,因为 Map 不是可枚举属性的对象,也没有自有可遍历的键值对属性。必须先把它转成键值对数组,再构造对象。
推荐写法:用 Object.fromEntries()
这是最简洁、语义最清晰、且原生支持的方法:
const obj = Object.fromEntries(map);它直接接收一个可迭代对象(如 Map),把每项 [key, value] 当作键值对,生成普通对象。
- ✅ 支持任意类型 key(但转成对象后,非字符串/符号 key 会被隐式转为字符串)
- ✅ 一行代码,无副作用,性能好
- ✅ ES2019 标准方法,现代浏览器和 Node.js ≥ 12 均支持
兼容旧环境的替代写法:结合扩展运算符 + Array.from()
如果需兼容不支持 Object.fromEntries() 的环境,可这样组合使用:
说明:先用 Array.from(map, cb) 把 Map 映射成对象数组 [{k1:v1}, {k2:v2}],再用扩展运算符展开,交给 Object.assign 合并。
- ⚠️ 注意:该方式在 key 重复时后者会覆盖前者(与 Object.assign 行为一致)
- ⚠️ 性能不如
Object.fromEntries,尤其数据量大时
不推荐的“伪优雅”写法
比如:const obj = {...Array.from(map)} 或 const obj = {...map.entries()} —— 这些结果不是你想要的对象,而是类似 {0: ['a', 1], 1: ['b', 2]} 的索引对象,完全失效。
- ❌
Array.from(map)返回二维数组,扩展后变成以数字为键的对象,不是键值映射 - ❌
map.entries()返回的是迭代器,不能直接扩展
用 Object.fromEntries(map) 就够了,干净、标准、可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











