推荐答案
Object.fromEntries()
方法用于将一个键值对的列表(通常是 Map
或包含键值对的二维数组)转换为一个对象。它会遍历输入的键值对,并将每个键值对的键作为对象的属性名,值作为属性值,最终返回一个新创建的对象。
本题详细解读
语法
Object.fromEntries(iterable);
iterable
: 一个可迭代对象,例如Map
对象、二维数组、或任何实现了迭代协议的对象,其迭代器产生键值对,形式如[key, value]
。
作用
Object.fromEntries()
的核心作用是将数据结构转换为对象。这在以下场景中非常有用:
- 将 Map 转换为对象:
Map
对象存储键值对,但与普通对象不同,Object.fromEntries()
提供了一种直接将其转换为普通对象的方法。 - 处理 API 返回的键值对数组: 某些 API 可能返回键值对的二维数组,可以使用此方法将其转换为对象,方便后续操作。
- 反向操作 Object.entries(): 与
Object.entries()
方法相反,Object.entries()
将对象转换为键值对的二维数组,而Object.fromEntries()
则执行相反的操作。
用法示例
从 Map 转换
const map = new Map([['name', 'John'], ['age', 30], ['city', 'New York']]); const obj = Object.fromEntries(map); console.log(obj); // 输出:{ name: 'John', age: 30, city: 'New York' }
从二维数组转换
const arr = [['a', 1], ['b', 2], ['c', 3]]; const obj = Object.fromEntries(arr); console.log(obj); // 输出:{ a: 1, b: 2, c: 3 }
处理特殊键
如果 iterable
中的键不是字符串或者可以转换为字符串,则会使用 String(key)
强制类型转换。
const arr = [[1, 'one'], [true, 'yes'], [null, 'none']]; const obj = Object.fromEntries(arr); console.log(obj); // 输出:{ '1': 'one', 'true': 'yes', 'null': 'none' }
重复键
如果 iterable
中存在重复的键,后面的键值对会覆盖前面的键值对。
const arr = [['a', 1], ['b', 2], ['a', 3]]; const obj = Object.fromEntries(arr); console.log(obj); // 输出:{ a: 3, b: 2 }
与 Object.entries() 的关系
Object.fromEntries()
是 Object.entries()
的逆操作。你可以将一个对象转换为键值对的数组,然后用 Object.fromEntries()
转换回对象:
const originalObj = { name: 'Alice', age: 25 }; const entries = Object.entries(originalObj); const newObj = Object.fromEntries(entries); console.log(newObj); // 输出:{ name: 'Alice', age: 25 }
兼容性
Object.fromEntries()
是 ES2019 中引入的新方法,现代浏览器和 Node.js 版本都支持它。如果需要在较旧的环境中使用,可能需要使用 polyfill。