首先,我们需要明白对象具有键和值。

const object = {key: 'value'
}

如果我们想把某个东西转换成一个对象,我们需要传递具有这两个要求的东西:键和值。

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

  • 具有嵌套键值对的数组
  • Map 对象

数组

这是一个带有键值对的嵌套数组

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

当我们应用它时,我们可以使用 Object.fromEntries 方法获取对象:

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

Map

ES6 为我们带来了一个名为 Map 新的数据结构,它与 Objects 非常相似。

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

让我们创建新的 map 对象。

// 使用 constructor
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.fromEntriesmap 转换成一个对象

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

其他类型

尝试将其他数据类型传递到 Object.fromEntries 时要小心。以下所以列出的所有情况将一致抛出一个错误:

类型
undefined Object.fromEntries(undefined)
Null Object.fromEntries(null)
Boolean Object.fromEntries(true)
Number Object.fromEntries(100)
String Object.fromEntries("hi")
Object Object.fromEntries({key: "value"})
扁平化数组 Object.fromEntries([1,2,3])

注意:确保只传递一个键值对。

Object.fromEntriesObject.entries

Object.entries 方法返回一个给定对象自身可枚举属性的键值对数组。

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 时,是因为它让我们能够访问一些漂亮的数组方法。

const user = {name: 'O.O',age: 18,address: 'xxx'
}console.log(Object.entries(user).filter(([key, value]) => key !== 'age'))
// [["name", "O.O"], ["address", "xxx"]]

它返回了一组嵌套数组,而不是我们想要的对象转对象,后面又引入了 fromEntries 方便该操作。

const arr = [["name", "O.O"], ["address", "xxx"]]
console.log((Object.fromEntries(arr)) // {name: "O.O", address: "xxx"}const user = {name: 'O.O',age: 18,address: 'xxx'
}Object.fromEntries(Object.entries(user).filter(([key, value]) => key !== 'age'))
// {name: "O.O", address: "xxx"}

浏览器支持情况

除了 IE,大多数主流浏览器都支持这种方法:

Object.fromEntries()

替代方案

Object.fromEntries 于2019年推出,所以它仍然是相当新的的一个方法。因此,在照顾旧浏览器的情况下,我们需要其他的替代方案,将一个键值对数组转化为一个对象以更好的支持。

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 }),{})
}toObject(array) // { key1: 'value1', key2: 'value2' }
toObject(map) // { key1: 'value1', key2: 'value2' }

Underscore 和 Lodash

Underscore 和 Lodash 也可将键值对转换为对象。

_.object — 将阵列转换为对象。传递单个[键、值]对列表,或键列表和值列表。

// Underscore
const array = [['key1', 'value1'],['key2', 'value2']
]_.object(array) // { key1: 'value1', key2: 'value2' }

_.fromPairs — 此方法返回由键值对组成的对象。

// Lodash
const array = [['key1', 'value1'],['key2', 'value2']
]_.fromPairs(array) // { key1: 'value1', key2: 'value2' }

http://www.taodudu.cc/news/show-6742772.html

相关文章:

  • 【Python】转译日文乱码(txt文件)
  • 关于集合(日文)
  • 日文文字列表
  • 怎样区分中文汉字和日文汉字
  • 日文解压乱码修复
  • 图像增强代码
  • 代码 图片
  • 【代码 图片】
  • 【代码篇】图像预处理阶段:提取图像特征
  • 图像处理代码集合
  • 图像实现代码
  • 图象处理源代码集
  • 图像处理 源代码
  • 无线网优实习报告
  • 通过tensorflow进行物体检测1 x
  • Scray和selenium的使用
  • Mac软件推荐:NoMachine轻松带你远程控制桌面
  • UWB精准定位:让电厂更安全
  • TBOX定位测试-如何用Excel分析对比RTK数据
  • macosBrew
  • 解决mac item2 sz rz命令失效问题
  • Alfred v5.0.0-EA9 Mac效率神器 兼容 M1
  • iOS开发中,出现错误:Apple Mach-O Linker Error
  • kmemleak工具
  • 了解行业信息的几个网站
  • python爬取企业电话_如何用python抓取爱企查企业信息
  • 泰山OFFICE技术讲座:页面宽高大小及来源,及磅、英寸、厘米、DPI的换算关系
  • PMP到底难不难考?
  • 很多人都在考的PMP认证到底有什么用?考试内容难不难?
  • 2023考PMP考试难度大吗?全盘解析

如何在 JavaScript 中将数组转为对象相关推荐

  1. 如何在JavaScript中将十进制转换为十六进制

    如何在JavaScript中将十进制值转换为等效的十六进制值? #1楼 如果要将数字转换为RGBA颜色值的十六进制表示形式,我发现这是以下几个技巧中最有用的组合: function toHexStri ...

  2. JavaScript将数组转为树形结构

    JavaScript将数组转为树形结构 1.需求 后台给了一个这样的数据让咱前端去转换为树形结构(没有重复数据).不多说,先来看看给了一个怎样的数组数据,转换为怎样的树形结构. 服务器传过来的数组 c ...

  3. es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...

    转载请注明出处,保留原文链接以及作者信息 ES6 有很多新特性,它很大程度上提升了 JavaScript 的编程体验,并且也告诉外界,JavaScript 依旧强势. 其中一个新特性是其对数组和对象的 ...

  4. 如何在JavaScript中将浮点数转换为整数?

    我想在JavaScript中将浮点数转换为整数. 实际上,我想知道如何同时进行标准转换:截断和舍入. 而且有效,而不是通过转换为字符串和解析. #1楼 按位或运算符 可以使用按位或运算符截断浮点数,它 ...

  5. Java中用一条语句把基础类型(int)数组转为对象数组(Integer),或者变为List

    //不多说直接上代码int[] a={1,3,4};/**下面是将基本数组转化为对象数组*/ Integer[] ib= IntStream.of(a).boxed().collect(Collect ...

  6. es6数组里面获取某个值对_ES6:解构——JavaScript 从数组和对象中提取数据的文雅要领...

    转载请说明出处,保存原文链接以及作者信息 ES6 有许多新特征,它很大程度上提升了 JavaScript 的编程体验,而且也通知外界,JavaScript 照旧强势. 个中一个新特征是其对数组和对象的 ...

  7. Javascript 获取数组长度, 对象成员个数, 字符串数

    1.应用场景 主要用于获取数组长度, 对象成员个数, 字符串数. 2.学习/操作 Q1.Javascript怎么得到数组长度(也就是数组的元素个数)? Q2.Javascript怎么获取对象的成员个数 ...

  8. JavaScript遍历数组和对象

    for循环遍历数组 for ...in遍历数组和对象均可 //用for循环遍历数组 var arr = new Array("orange", "banana" ...

  9. 如何在 JavaScript 中将数字四舍五入到小数点后两位

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 英文 | https://codingbeauty.medium.com/javascript-round-number-to-2-dec ...

最新文章

  1. footer bar in SAP Fiori as a service
  2. ip route / ip rule /iptables 配置策略路由
  3. 面试字节跳动Android工程师该怎么准备?深度解析,值得收藏
  4. 剖析JavaScript传值
  5. 语音识别软件_语音识别软件是什么_离线语音识别软件_企业服务汇
  6. Serengeti Accomodation
  7. c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
  8. php 快递100接口
  9. Android Studio实现用户登陆界面demo(xml实现)
  10. 2019百度网盘破解不限速
  11. python 短信_Python怎么接收手机短信?
  12. 网吧用计算机性能配件清单,网吧组装电脑配置清单
  13. php话费充值接口,手机话费充值接口
  14. MyBatis学习总结-06:动态SQL
  15. 真正的高手,都在自讨苦吃——数显之家快讯之【SHIO世硕心语】
  16. PMEdit一个富文本框可以编辑文本、并可以显示GIF动画
  17. mdx格式的词典用什么软件打开_抄作业了!手把手教你安装欧路词典(ios系统为例)...
  18. 啊哈添柴挑战Java1008. 输入两个整数,倒序输出
  19. java注释搞笑图案_搞笑的代码注释,那些有趣的程序员
  20. 数据挖掘之条件概率和朴素贝叶斯分类器

热门文章

  1. 给你8个接私活的网站,保证你月薪轻松上W
  2. scrapy--(failed 3 times): [<twisted.python.failure.Failure twisted.web._newclient.ParseError
  3. 315MHz无线通讯模块调试心得
  4. 畅捷通二次开发过程的理解
  5. 微信小程序开发(后端Java)
  6. QQ,微信第三方授权登录、分享
  7. 【转】latex命令替换之\newcommand
  8. ITIL在数据中心运维中的应用
  9. 低碳哥,笑中带泪的无奈
  10. 不同时区时间戳是一样的吗_读完预科也能直升二年级?一不小心就成了时间管理大师!...