推荐答案
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。