【译】关于Object.fromEntries

栏目: JavaScript · 发布时间: 4年前

内容简介:原文:v8.dev/features/ob…作者:Mathias Bynens翻译:前端小白

原文:v8.dev/features/ob…

作者:Mathias Bynens

翻译:前端小白

Object.fromEntries 是javascript Object 对象新增的一个非常实用的方法。在解释它的功能之前,我们先了解下已经存在的 Object.entries API

Object.entries

Object.entries 已经出现一段时间了,

浏览器支持(了解更多):

【译】关于Object.fromEntries

对于对象中的每个键值对, Object.entries 提供一个数组,其中第一个元素是键,第二个元素是值。

Object.entriesfor-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

Object.fromEntries 这个新的API实现了与 Object.entries 相反的操作。这使得根据对象的 entries 很容易得到 object

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 ,然后使用您可能已经熟悉的数组方法来实现这一点

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 ,即 xy ,而不是 abc 。然后通过 map 得到更新后的键值对。在本例中,我们将每个值乘以2,使其翻倍。最终的结果是一个新对象,只有属性x和y,以及新值。

Objects vs. maps

JavaScript还支持Map,这通常是比常规对象更合适的数据结构。所以当你可以完全控制的代码时,你可以使用映射而不是对象。然而,作为开发人员,您并不总是能够选择哪种形式。有时,您正在操作的数据来自外部API或库函数,这些函数提供对象而不是映射。

Object.entries 使从 objectsmaps 非常简单

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.entriesObject.fromEntries 这两个方法让我们很容易在 mapsobjects 之间相互转换

警告:小心数据丢失

当将映射转换为像上面例子中那样的普通对象时,有一个隐含的假设,即每个键都是惟一字符串化的。如果这个假设不成立,就会发生数据丢失

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 结果。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具