Object.fromEntries() 是 ES2019 引入的方法,用于将可迭代对象(如二维数组、Map 等)中每个长度为 2 的数组 [key, value] 转换为普通对象,键自动转字符串,重复键后者覆盖前者,非数组子项会报错。

Object.fromEntries() 是 ES2019 引入的方法,专门用于把键值对列表(如数组、Map 或其他可迭代对象)转换成一个普通对象。
它能处理哪些输入?
只要输入是可迭代的、每个元素都是长度为 2 的数组([key, value]),就能用。常见来源包括:
- 二维数组:
[["a", 1], ["b", 2]] - Map 实例:
new Map([["x", "hello"], ["y", true]]) - 其他符合规则的可迭代对象(比如自定义生成器返回 [k, v])
基本用法示例
最常用的是从二维数组转对象:
const entries = [["name", "Alice"], ["age", 30], ["city", "Beijing"]];
const obj = Object.fromEntries(entries);
// → { name: "Alice", age: 30, city: "Beijing" }
配合 Map 使用也很自然:
立即学习“Java免费学习笔记(深入)”;
const map = new Map([["id", 101], ["status", "active"]]);
const obj = Object.fromEntries(map);
// → { id: 101, status: "active" }
和 Object.entries() 是一对“逆操作”
它们互为反向:
-
Object.entries(obj)把对象转成[["k1",v1], ["k2",v2]]形式 -
Object.fromEntries(entries)把那个结果再变回去
所以可以链式使用,比如浅拷贝并修改某些字段:
const original = { a: 1, b: 2 };
const modified = Object.fromEntries(
Object.entries(original).map(([k, v]) => [k, v * 2])
);
// → { a: 2, b: 4 }
注意几个细节
- 键会被自动转为字符串(除非是 Symbol);数字、布尔等作为 key 会调用
String() - 如果多个条目有相同 key,后面会覆盖前面
- 不支持非数组子项(比如
[["a", 1], "bad"]会报错) - 空可迭代对象返回空对象
{}










