原文:v8.dev/features/ob…
做者:Mathias Bynens
翻译:前端小白javascript
Object.fromEntries
是javascript Object
对象新增的一个很是实用的方法。在解释它的功能以前,咱们先了解下已经存在的 Object.entries
API前端
Object.entries
已经出现一段时间了,java
浏览器支持(了解更多):数组
对于对象中的每一个键值对,Object.entries
提供一个数组,其中第一个元素是键,第二个元素是值。浏览器
Object.entries
与 for-of
结合起来特别有用,由于它使您可以很是优雅地遍历对象中的全部键值对数据结构
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]
for (const [key, value] of entries) {
console.log(`The value of ${key} is ${value}.`);
}
// Logs:
// The value of x is 42.
// The value of y is 50.
复制代码
可是,到目前为止尚未一个简单的方法,能够从 entries
获得和它相对应的 object
函数
Object.fromEntries
这个新的API实现了与 Object.entries
相反的操做。这使得根据对象的 entries
很容易获得 object
ui
const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]
const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }
复制代码
一个常见的用法就是转换对象。如今能够经过遍历它的 entries
,而后使用您可能已经熟悉的数组方法来实现这一点spa
const object = { x: 42, y: 50, abc: 9001 };
const result = Object.fromEntries(
Object.entries(object)
.filter(([ key, value ]) => key.length === 1)
.map(([ key, value ]) => [ key, value * 2 ])
);
// → { x: 84, y: 100 }
复制代码
在上面例子中,咱们对对象进行过滤,获得长度为1的 key
,即 x
和 y
,而不是 abc
。而后经过 map
获得更新后的键值对。在本例中,咱们将每一个值乘以2,使其翻倍。最终的结果是一个新对象,只有属性x和y,以及新值。翻译
JavaScript还支持Map,这一般是比常规对象更合适的数据结构。因此当你能够彻底控制的代码时,你能够使用映射而不是对象。然而,做为开发人员,您并不老是可以选择哪一种形式。有时,您正在操做的数据来自外部API或库函数,这些函数提供对象而不是映射。
Object.entries
使从 objects
到 maps
很是简单
const object = { language: 'JavaScript', coolness: 9001 };
// Convert the object into a map:
const map = new Map(Object.entries(object));
复制代码
反过来也一样有用:当你的代码使用 map
,你也可能须要在某个时候序列化您的数据,例如将其转换为JSON以发送API请求。或者,您可能须要将数据传递给另外一个库,该库指望对象而不是映射。在这些状况下,您须要基于映射数据建立一个对象。Object.fromEntries
使其变得很简单
// Convert the map back into an object:
const objectCopy = Object.fromEntries(map);
// → { language: 'JavaScript', coolness: 9001 }
复制代码
Object.entries
和 Object.fromEntries
这两个方法让咱们很容易在 maps
和 objects
之间相互转换
当将映射转换为像上面例子中那样的普通对象时,有一个隐含的假设,即每一个键都是唯一字符串化的。若是这个假设不成立,就会发生数据丢失
const map = new Map([
[{}, 'a'],
[{}, 'b'],
]);
Object.fromEntries(map);
// → { '[object Object]': 'b' }
// Note: the value 'a' is nowhere to be found, since both keys
// stringify to the same value of '[object Object]'.
复制代码
因此在咱们使用 Object.fromEntries
或者其余方法将 map
转换为 object
以前,确保 map
的键产生惟一的 toString
结果。
Object.fromEntries()
trimStart()
trimEnd()
flat()
flatMap()