Object.fromEntries()

Object.fromEntries() 静态方法将键值对列表转换为对象。

试一试

语法

js
Object.fromEntries(iterable)

参数

iterable

一个可迭代对象,例如一个ArrayMap,包含一个对象列表。每个对象应具有两个属性

0

一个表示属性键的字符串或符号

1

属性值。

通常,此对象实现为一个包含两个元素的数组,第一个元素为属性键,第二个元素为属性值。

返回值

一个新对象,其属性由可迭代对象的条目给出。

描述

Object.fromEntries() 方法接受一个键值对列表,并返回一个新对象,其属性由这些条目给出。iterable 参数应该是一个实现了 [Symbol.iterator]() 方法的对象。该方法返回一个迭代器对象,它生成包含两个元素的类似数组的对象。第一个元素是一个值,将用作属性键,第二个元素是与该属性键关联的值。

Object.fromEntries() 执行 Object.entries() 的反向操作,但 Object.entries() 只返回字符串键的属性,而 Object.fromEntries() 也可以创建符号键的属性。

注意:Array.from() 不同,Object.fromEntries() 不使用 this 的值,因此在另一个构造函数上调用它不会创建该类型的对象。

示例

将 Map 转换为对象

使用 Object.fromEntries,你可以从 Map 转换为 Object

js
const map = new Map([
  ["foo", "bar"],
  ["baz", 42],
]);
const obj = Object.fromEntries(map);
console.log(obj); // { foo: "bar", baz: 42 }

将数组转换为对象

使用 Object.fromEntries,你可以从 Array 转换为 Object

js
const arr = [
  ["0", "a"],
  ["1", "b"],
  ["2", "c"],
];
const obj = Object.fromEntries(arr);
console.log(obj); // { 0: "a", 1: "b", 2: "c" }

对象转换

使用 Object.fromEntries,其反向方法 Object.entries()数组操作方法,你可以像这样转换对象

js
const object1 = { a: 1, b: 2, c: 3 };

const object2 = Object.fromEntries(
  Object.entries(object1).map(([key, val]) => [key, val * 2]),
);

console.log(object2);
// { a: 2, b: 4, c: 6 }

规范

规范
ECMAScript 语言规范
# sec-object.fromentries

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅