map转对象或数组取决于需求:键为字符串/数字时用object.fromentries();需保序、还原或任意键类型时用array.from(map);仅需键或值时分别用array.from(map.keys())或array.from(map.values())。

Map 转成普通对象或数组,关键看你要保留什么信息、后续怎么用。字符串/数字键直接转对象很方便;任意键类型或要保序、可还原,就该选数组格式。
转成普通对象(适合 JSON 交互或解构)
当 Map 的所有键都是字符串或数字时,用 Object.fromEntries() 最简洁:
-
const obj = Object.fromEntries(map)—— 得到 { key: value } 形式对象 - 数字键(如
1)、布尔键(如true)会被自动转成字符串"1"、"true" - Symbol 键能保留,但对象键或函数键会变成
"[object Object]",造成冲突,应避免 - 值是引用类型(比如嵌套对象)时,新对象里仍是同一引用,修改会影响原 Map 中的值
转成二维数组(推荐用于序列化或还原)
这是最通用、最安全的方式,尤其适合需要保留原始键类型(如布尔、对象、Symbol)或后续要还原为 Map 的场景:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
const arr = Array.from(map)或const arr = [...map]—— 得到[[key1, val1], [key2, val2]] - 再用
JSON.stringify(arr)可安全序列化,不会丢失键信息 - 还原时只需
new Map(JSON.parse(jsonStr)),完全往返无损 - 比转对象更健壮,不依赖键类型,也不受可枚举性限制
只取键或只取值,转成一维数组
如果只需要键列表或值列表,不用完整键值对:
-
Array.from(map.keys())→ 字符串/数字/Symbol 等所有类型的键组成的数组 -
Array.from(map.values())→ 所有值组成的数组,支持嵌套对象、函数等任意类型 - 注意:
map.keys()和map.values()返回的是迭代器,必须用Array.from()或展开运算符才能转数组
手动处理特殊键(对象、函数作键时)
如果非要用对象或函数当 Map 的键,又必须转成普通对象,就得自己映射键名:
- 不能依赖
Object.fromEntries(),否则键全变成"[object Object]" - 可加前缀生成唯一字符串键,例如:
`ref_${index}`或key.constructor.name + '_' + Date.now() - 同时保存原始键的弱引用(如 WeakMap)或额外元数据,便于后续反查
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










