ES10 新增的 Object.fromEntries() 是一个强大的方法,可以将包含键值对的 map 转换为对象。该方法可以将一个数组或者可迭代对象转换为对象。
为什么需要 Object.fromEntries()
在开发中,我们会经常使用到 map 这个构造函数来创建一个容纳键值对的集合。而在处理数据时,我们可能需要将这个集合转换为一个对象。在 ES10 之前,我们使用对象字面量、Object.assign() 或者遍历 map 然后对该对象进行赋值来完成这个转换。
但是这些转换方法可能存在一些限制,而使用 Object.fromEntries() 就可以轻松实现这个转换。
用法和示例
Object.fromEntries() 接收一个二维数组或者可迭代对象,返回一个由键值对组成的对象。
参数
- iterable:一个二维数组或者可迭代对象,必须返回一个可迭代的迭代器对象。
返回值
- 由键值对组成的对象。
下面是基于对象字面量的方法:
const obj = { name: "Alice", age: 30, favoriteColor: "blue", };
使用 Object.keys()、map 和 reduce 方法,我们可以进行 map 转换:
const entries = Object.keys(obj).map((key) => [key, obj[key]]); const obj2 = Object.assign({}, ...entries);
使用 Object.fromEntries() 的简洁方法:
const obj3 = Object.fromEntries(Object.entries(obj));
从上面的例子可以看出,使用 Object.fromEntries() 之后我们可以节省很多代码。
给定一个二维数组时
const arr = [ ["name", "Bob"], ["age", 28], ["favoriteColor", "green"], ]; const obj = Object.fromEntries(arr); console.log(obj) // {name: "Bob", age: 28, favoriteColor: "green"}
给定一个可迭代对象时
const people = new Map([ ["name", "Jack"], ["age", 20], ["favoriteColor", "red"], ]); const obj = Object.fromEntries(people); console.log(obj) // {name: "Jack", age: 20, favoriteColor: "red"}
使用 Object.fromEntries() 实现对象的反转
const obj = { a: 10, b: 20, c: 30 }; const arr = Object.entries(obj).map(([k, v]) => [v, k]); console.log(Object.fromEntries(arr)) // {10: "a", 20: "b", 30: "c"}
从上面的例子看出,使用 Object.fromEntries() 可以方便的完成对象的反转。
总结
在开发中,我们可能经常需要将集合转换为对象。在 ES10 之前,我们可能会使用对象字面量、Object.assign() 或者遍历 map 然后对该对象进行赋值来完成这个转换。而 Object.fromEntries() 可以更快捷便利地完成这个转换。
使用 Object.fromEntries() 我们可以:
- 将一个 map 转换为对象
- 将一个数组转换为对象
- 将一个可迭代对象转换为对象
- 反转对象的键值对并构建为新的对象
在使用 Object.fromEntries() 时,需要注意参数的格式和返回值的格式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6454723c968c7c53b0857304