位置:首页 > JavaScript > JavaScript中ES6的Object.fromEntries如何还原对象

JavaScript中ES6的Object.fromEntries如何还原对象

时间:2026-08-20  |  作者:冻月看渠  |  阅读:0

Object.fromEntries 的作用,说白了就是把一组键值对重新拼装成对象。

它要求传入的数据必须是可迭代对象,而且其中的每一项都得是长度为 2 的 [key, value] 数组。常见的数组和 Map 都支持。

需要注意的是,如果 key 不是字符串,通常会被自动转换成字符串,Symbol 是个例外。

Ja vaScript 中 ES6 对象的 Object.fromEntries 怎么还原对象

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() 结果还原对象

最典型的场景,就是把 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 转成字符串,除非这个 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(...) 这类单数组,它生成的是一维结构,不能直接用

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多