ES10 中 Object.fromEntries() 怎么用?

2023-05-16

我们知道 Object.entries() 是将对象转成一个自身可枚举属性的键值对数组。同样,我们也可以把键值对数组转成了对象。

const keyValuePair = [
  ['cow', '?'],
  ['pig', '?'],
]

Object.fromEntries(keyValuePair);
// { cow: '?', pig: '?' }

Object.fromEntries

我们知道,对象结构是一个是有键和值组合体,如下所示:

const object = {
  key: 'value',
};

基于这个逻辑,如果我们想将某个东西转成对象,就必须要传递键和值

有两种类型的参数可以满足这些要求:

  1. 具有嵌套键值对的数组
  2. Map 对象

使用 Object.fromEntries 将数组转成对象

下面是个键-值对嵌套数组

const nestedArray = [
  ['key 1', 'value 1'],
  ['key 2', 'value 2']
]

使用Object.fromEntries可以将该数组转成对象:

Object.fromEntries(nestedArray);
// { key 1: "value 1", key 2: "value 2"}

使用 Object.fromEntries 将 Map 转成对象

ES6 为我们带来了一个名为 map 的新对象,它与对象非常相似。

TC39:映射对象是键/值对的集合,其中键和值都可以是任意 ECMAScript 语言值。

我们来创建一个 Map 对象:

// 使用构造函数 
const map = new Map([ ['key 1', 'value 1'], ['key 2', 'value 2'] ]) 
// 或者我们可以使用实例方法“set” 
const map = new Map() 
map.set('key 1', 'value 1') 
map.set('key 2', 'value 2') 
// 结果 Map(2) {"key 1" => "value 1", "key 2" => "value 2"}

让我们使用Object.fromentries将 map 转换为一个对象

Object.fromEntries(map);
// { key 1: "value 1", key 2: "value 2"}

对象的类型错误:试图使用 Object.fromEntries 将 其它类型 转成对象

将下面的类型传入 Object.fromEntries 都会导致报错 caught TypeError。

确保传递值要有键-值对。

Object.fromEntries vs Object.entries

Object.fromEntries 是 Object.entries 反向。 Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,而Object.fromEntries() 方法把键值对列表转换为一个对象。

const object = { key1: 'value1', key2: 'value2' }

const array = Object.entries(object)
// [ ["key1", "value1"], ["key2", "value2"] ]


Object.fromEntries(array)
// { key1: 'value1', key2: 'value2' }

对象到对象的转换

如果你阅读了 TC39 提案,这就是引入此新方法的原因。 随着Object.entries的引入之前,要将一些非对象结构转成对象是比较麻烦的。

通常,当我们选择使用Object.entries,是因为它使我们能够访问许多漂亮的数组方法,例如filter。 但是在完成转换之后,我们有点被该数组所困扰。

const food = { meat: '?', broccoli: '?', carrot: '?' }

// ? 卡在这结果上...
const vegetarian = Object.entries(food).filter(
  ([key, value]) => key !== 'meat',
)
// [ ["broccoli", "?"], ["carrot", "?"] ]

好吧! 我们可以利用所有这些有用的数组方法,但仍然可以返回对象。 最后,从对象到对象的转换?

const food = { meat: '?', broccoli: '?', carrot: '?' }

const vegetarian = Object.fromEntries(
  Object.entries(food).filter(([key, value]) => key !== 'meat'),
)

// { broccoli: '?', carrot: '?' }

数组转成对象的替代方案

Object.fromEntries是 ES10 推出来,很新,可能浏览器支持度还够友好。 因此,让我们看一下如果将具有键值对结构的数组转成对象。

使用 reduce 方法将数组转成对象

将数组转换为对象的一种流行方法是使用reduce。

const array = [
  ['key1', 'value1'],
  ['key2', 'value2']
]

const map = new Map([
  ['key1', 'value1'],
  ['key2', 'value2']
])

function toObject(pairs) {
  return Array.from(pairs).reduce(
    (acc, [key, value]) => Object.assign(acc, { [key]: value}),
    {}
  )
}


// 结果
// { key1: 'value1', key2: 'value2' }

使用 库 将数组转成对象

Lodash 也提供了将键值对转换为对象的方法。

_.object

将数组转换为对象。 传递[key, value]对的单个列表,或键的列表和值的列表。
const array = [
  ['key1', 'value1'],
  ['key2', 'value2']
]

_.object(array)
// { key1: 'value1', key2: 'value2' }

_.fromPairs

_.fromPairs 是 _.toPairs 的反向,它的方法返回一个由键值对组成的对象。

const array = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

_.fromPairs(array)
// { key1: 'value1', key2: 'value2' }

浏览器支持情况

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES10 中 Object.fromEntries() 怎么用? 的相关文章

  • 当一个对象被分配给另一个对象时会发生什么

    public class DrumKitTestDrive param args public static void main String args TODO Auto generated method stub Echo e1 new
  • 使用嵌套数组过滤对象数组

    所以我试图在对象数组上设置嵌套过滤器 问题是过滤器应用在对象内部的另一个对象数组的键上 这是代码 const items name 123 id 1 value true arr id 1 name 456 id 2 value false
  • TypeScript 扩展模块中的对象

    我想做的事情确实类似于this https stackoverflow com questions 12802383 extending array in typescript and this https stackoverflow co
  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • java中引用和对象有什么区别? [复制]

    这个问题在这里已经有答案了 我有类 GUI 所以我可以创建这样的对象 GUI g1 new GUI 和一个像这样的引用变量 GUI g2 现在据我所知 g2 是一个引用变量 它引用 GUI 类 而 g1 是 GUI 类的对象 g1和g2有什
  • Angular 2 - 通过引用传递对象字段。可重复使用的编辑对象的方式

    我正在创建可重用的表组件 该组件将允许编辑对象字段 以准备将它们发送到 API 拥有一个对象 person name John job type IT title Software Engineer 我想将对象嵌套字段传递给组件并进行编辑
  • java hashmaps 的 get() 函数

    我声明了以下哈希图 HashMap
  • 具有字典属性的 C# 匿名对象

    我正在尝试将字典转换为匿名类型 每个键都有一个属性 我尝试用谷歌搜索 但我所能找到的只是如何将匿名对象转换为字典 我的字典看起来像这样 var dict new Dictionary
  • 如何创建要添加到 JavaScript 对象变量的动态键 [重复]

    这个问题在这里已经有答案了 我正在尝试类似的事情 但这个例子不起作用 jsObj for var i 1 i lt 10 i jsObj key i example 1 我该怎么做才能制作这样的动态密钥 方括号 jsObj key i ex
  • 动态添加变量名称值对到 JSON 对象

    我有一个充满 ips 的 json 对象 例如 var ips 然后我将 ip 对象添加到该对象 如下所示 ips ipID 然后我需要向每个 ip 添加动态 变量名称值对 所以我使用这样的代码 var name var value var
  • VBScript 中的对象/类字典

    vbscript 中是否可以有对象 类的字典 例如 Class employeeclass Public first last salary End Class Dim employeedict Set employeedict Creat
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • Actionscript 对象的属性数量

    如何获取通用 Actionscript 对象中的属性数量 如数组长度 您必须循环所有元素才能对它们进行计数 function objectLength myObject Object int var cnt int 0 for var s
  • 在读取之前设置未定义的 javascript 属性

    var tr tr SomeThing SomeThingElse console log tr SomeThing SomeThingElse console log tr Other undefined tr get function
  • Python:如何将包含对象的列表保存在文件中?

    我尝试创建不同的对象 使用类和对象 并将它们保存在文件中以便稍后编辑或检索它们 然而这就是它的样子 GlobalCategories GlobalContent def LoadData x y import pickle with ope
  • 为什么.NET中的每个类都继承自Object?

    我不明白 为什么他们需要一个共同的基础 这个问题预设了一个谎言 他们不need一个共同的基础类型 这个选择并不是出于必要 这是出于为客户提供最佳价值的愿望 当设计类型系统或任何其他相关问题时 有时您会遇到决策点 您必须决定 X 或非 X 公
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • 在这种情况下 b 是标量对象吗?

    include
  • 字符串化 JavaScript 对象

    我正在寻找字符串化一个对象 我想要这样的输出 1 valeur dalebrun usager experttasp date 2013 08 20 16 41 50 2 valeur test usager experttasp date
  • C# 无法访问已释放的对象

    我正在制作一个服务器 客户端应用程序 我将服务器套接字设置为侦听 并设置 BeginAccept 方法 当我关闭服务器套接字 Socket Close 以关闭服务器时 BeginAccept 方法的异步回调方法抛出异常 我检查了异常 发现异

随机推荐

  • JS 中的类数组对象如何转换为数组?

    类数组对象是什么 xff1f 类数组对象 xff0c 就是含有 length 属性的对象 xff0c 但这个对象不是数组 通常来说还会有 0 xff5e length 1 的属性 xff0c 结构表现上非常像一个数组 const arrli
  • js实现文字跑马灯效果

    lt doctype html gt lt html gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta name 61 34 viewport 34 content 61 34
  • vue 有滚动条 点击拖拽滑动自定义指令

    lt div class 61 34 wrap 34 v flowDrag gt directives flowDrag bind el binding vnode oldNode if binding return el onmoused
  • 微信小程序相互跳转如何携带参数

    wx navigateToMiniProgram 要跳转的小程序的appid appId 39 wx1b125bf4cf709150 39 跳转的目标页面 xff0c 参数可以在另外一个小程序的onLoad中通过options接收 path
  • js删除字符串最后一个字符方法总汇

    需求 xff1a 去掉js字符串末尾的标点符号 比如原字符串 xff1a csdn net 目标字符串 xff1a csdn net 解决方案 xff1a 方法一 xff1a str slice 0 str length 1 方法二 xff
  • Google Analytics | 学习笔记

    一 简介 1 什么是GA xff1f 是谷歌开发的一款分析网页流量的工具 xff0c 可以帮助网站解决数据分析与统计的问题 xff0c 并且将这些数据可视化展现报告出来 xff0c 帮助网站商家更好的分析受众 xff0c 流量等 xff0c
  • vscode 新版解决冲突界面 改回老版

    很多更新了vscode小伙伴发现新版的解决冲突界面很不适应 xff0c 无从下手 xff0c 只需要加一个东西就可以改回老版的样式 在setting json 里添加 34 git mergeEditor 34 false
  • vue3中defineComponent 的作用

    VUE3中 xff0c 新增了 defineComponent xff0c 它并没有实现任何的逻辑 xff0c 只是把接收的 Object 直接返回 xff0c 它的存在是完全让传入的整个对象获得对应的类型 xff0c 它的存在就是完全为了
  • js打印去除浏览器的默认的页眉页脚

    去除打印的页眉页脚 try var hkeyKey var hkeyRoot 61 34 HKEY CURRENT USER 34 var hkehkeyPath 61 34 Software Microsoft Internet Expl
  • 微信小程序如何判断是否已经订阅某条消息

    判断订阅消息是否已经订阅 res subscriptionsSetting itemSettings 返回的是所有订阅消息的对象集合 xff0c 39 accept 39 表示用户同意订阅这条消息 xff0c 39 reject 39 表示
  • js根据当前时间获取当月的1号和最后一号

    js根据当前时间获取当月的1号和最后一号 function getcurentMonth cdate cdate传来的当前的时间 当天 let thatDay 61 34 34 当月第一天 let oneDayTime 61 34 34 当
  • js判断文件上传的类型

    js判断文件上传的类型 64 param fileName 文件名称 64 param 数据返回 1 无后缀匹配 false 64 param 数据返回 2 匹配图片 image 64 param 数据返回 3 匹配 txt txt 64
  • js数据流文件下载

    js数据流文件下载 64 param fileType 文件类型 64 param fileName 文件名称 64 param data 数据流文件 function download fileType bucketName data l
  • vscode 全局搜索时屏蔽node_modules和dist 目录

    打开设置 setting json 在里面添加屏蔽的文件目录即可 快捷打开 方式 ctrl 43 p 搜索 setting json 34 search exclude 34 34 dist 34 true 34 node modules
  • NVM 安装及注意事项

    1 下载 nvm Releases coreybutler nvm windows GitHub win10 下载 nvm setup zip 版本 解压并安装 不要修改默认安装路径 会自动写入系统环境变量 控制台 nvm v 查看是否安装
  • eslint 配置项大全 含中文注释

    34 rules 34 定义对象的set存取器属性时 xff0c 强制定义get 34 accessor pairs 34 2 指定数组的元素之间要以空格隔开 后面 xff0c never参数 xff1a 之前和 之后不能带空格 xff0c
  • Linux 路由配置 route命令 /etc/sysconfig/static-routes

    一 临时添加路由 重启network服务失效 方法一 route命令 frags为路由标志 xff0c 标记当前网络节点的状态 add 增加路由 U Up表示此路由当前为启动状态 del 删除路由 H Host xff0c 表示此网关为一主
  • js生成1到100的数组方法

    生成1到100的数组的一种方法是使用JavaScript的Array from 方法 例如 xff0c 下面的将生成1到100的数组 xff1a const numbers 61 Array from Array 100 keys n 61
  • uniapp如何开启短震动、触感反馈实现

    使用 uni app 开发一款 app xff0c 需求中有一项是点击 触感反馈 xff0c 查阅了 uni app 相关文档 xff0c 发现并没有对应的 api xff0c 最开始尝试用 震动 的方式来模拟 触感反馈 但是感觉效果并不好
  • ES10 中 Object.fromEntries() 怎么用?

    我们知道 Object entries 是将对象转成一个自身可枚举属性的键值对数组 同样 xff0c 我们也可以把键值对数组转成了对象 span class hljs keyword const span keyValuePair 61 s