object.fromentries 用于将键值对列表还原为对象,要求输入为可迭代对象且每项是长度为2的[key, value]数组;支持数组和map,key非字符串时会转为字符串(symbol除外)。

Object.fromEntries 的作用就是把键值对列表还原成普通对象,它正好是 Object.entries 的逆操作。
什么格式能被 fromEntries 正确还原?
它只接受一个**可迭代对象**(比如数组、Map),且每一项必须是长度为 2 的数组,形式为 [key, value]:
- ✅ 正确:二维数组,如
[["a", 1], ["b", 2]] - ✅ 正确:Map 实例,如
new Map([["x", "hello"], ["y", true]]) - ❌ 错误:缺少某项(长度不为 2)、key 不是字符串或 Symbol、嵌套过深等都会报错或行为异常
常见还原场景和写法
最典型的是从 Object.entries() 结果还原回去:
const obj = { name: "Alice", age: 30 };
const entries = Object.entries(obj); // [["name", "Alice"], ["age", 30]]
const restored = Object.fromEntries(entries); // { name: "Alice", age: 30 }
也可以用于过滤或转换后重建对象:
const data = { a: 1, b: 2, c: 3, d: 4 };
// 只保留值大于 2 的键值对
const filtered = Object.entries(data)
.filter(([, v]) => v > 2)
.map(([k, v]) => [k, v * 10]); // [["c", 30], ["d", 40]]
const result = Object.fromEntries(filtered); // { c: 30, d: 40 }
注意 key 的类型和隐式转换
fromEntries 会把 key 转成字符串(除非是 Symbol):
-
Object.fromEntries([[true, "yes"], [null, "none"]])→{ "true": "yes", "null": "none" } -
Object.fromEntries([[Symbol("id"), 123]])→{ [Symbol("id")]: 123 }(Symbol 保持原样)
如果原始对象有 Symbol 键,Object.entries() 会丢掉它们,所以用 fromEntries 还原时无法恢复 Symbol 键 —— 这是固有限制。
替代方案:处理更复杂结构
如果数据不是标准二维数组(比如有嵌套、缺字段、需要容错),建议先清洗再传入:
- 用
Array.filter剔除无效项 - 用
Array.map统一格式,确保每项是[k, v] - 避免直接传入
Object.keys(obj).map(...)这类单数组,它生成的是一维结构,不能直接用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











