如何在 JavaScript 中将数组转为对象
首先,我们需要明白对象具有键和值。
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.fromEntries
将 map
转换成一个对象
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.fromEntries
和 Object.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,大多数主流浏览器都支持这种方法:
![](/assets/blank.gif)
替代方案
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 中将数组转为对象相关推荐
- 如何在JavaScript中将十进制转换为十六进制
如何在JavaScript中将十进制值转换为等效的十六进制值? #1楼 如果要将数字转换为RGBA颜色值的十六进制表示形式,我发现这是以下几个技巧中最有用的组合: function toHexStri ...
- JavaScript将数组转为树形结构
JavaScript将数组转为树形结构 1.需求 后台给了一个这样的数据让咱前端去转换为树形结构(没有重复数据).不多说,先来看看给了一个怎样的数组数据,转换为怎样的树形结构. 服务器传过来的数组 c ...
- es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...
转载请注明出处,保留原文链接以及作者信息 ES6 有很多新特性,它很大程度上提升了 JavaScript 的编程体验,并且也告诉外界,JavaScript 依旧强势. 其中一个新特性是其对数组和对象的 ...
- 如何在JavaScript中将浮点数转换为整数?
我想在JavaScript中将浮点数转换为整数. 实际上,我想知道如何同时进行标准转换:截断和舍入. 而且有效,而不是通过转换为字符串和解析. #1楼 按位或运算符 可以使用按位或运算符截断浮点数,它 ...
- Java中用一条语句把基础类型(int)数组转为对象数组(Integer),或者变为List
//不多说直接上代码int[] a={1,3,4};/**下面是将基本数组转化为对象数组*/ Integer[] ib= IntStream.of(a).boxed().collect(Collect ...
- es6数组里面获取某个值对_ES6:解构——JavaScript 从数组和对象中提取数据的文雅要领...
转载请说明出处,保存原文链接以及作者信息 ES6 有许多新特征,它很大程度上提升了 JavaScript 的编程体验,而且也通知外界,JavaScript 照旧强势. 个中一个新特征是其对数组和对象的 ...
- Javascript 获取数组长度, 对象成员个数, 字符串数
1.应用场景 主要用于获取数组长度, 对象成员个数, 字符串数. 2.学习/操作 Q1.Javascript怎么得到数组长度(也就是数组的元素个数)? Q2.Javascript怎么获取对象的成员个数 ...
- JavaScript遍历数组和对象
for循环遍历数组 for ...in遍历数组和对象均可 //用for循环遍历数组 var arr = new Array("orange", "banana" ...
- 如何在 JavaScript 中将数字四舍五入到小数点后两位
点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 英文 | https://codingbeauty.medium.com/javascript-round-number-to-2-dec ...
最新文章
- footer bar in SAP Fiori as a service
- ip route / ip rule /iptables 配置策略路由
- 面试字节跳动Android工程师该怎么准备?深度解析,值得收藏
- 剖析JavaScript传值
- 语音识别软件_语音识别软件是什么_离线语音识别软件_企业服务汇
- Serengeti Accomodation
- c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
- php 快递100接口
- Android Studio实现用户登陆界面demo(xml实现)
- 2019百度网盘破解不限速
- python 短信_Python怎么接收手机短信?
- 网吧用计算机性能配件清单,网吧组装电脑配置清单
- php话费充值接口,手机话费充值接口
- MyBatis学习总结-06:动态SQL
- 真正的高手,都在自讨苦吃——数显之家快讯之【SHIO世硕心语】
- PMEdit一个富文本框可以编辑文本、并可以显示GIF动画
- mdx格式的词典用什么软件打开_抄作业了!手把手教你安装欧路词典(ios系统为例)...
- 啊哈添柴挑战Java1008. 输入两个整数,倒序输出
- java注释搞笑图案_搞笑的代码注释,那些有趣的程序员
- 数据挖掘之条件概率和朴素贝叶斯分类器
热门文章
- 给你8个接私活的网站,保证你月薪轻松上W
- scrapy--(failed 3 times): [<twisted.python.failure.Failure twisted.web._newclient.ParseError
- 315MHz无线通讯模块调试心得
- 畅捷通二次开发过程的理解
- 微信小程序开发(后端Java)
- QQ,微信第三方授权登录、分享
- 【转】latex命令替换之\newcommand
- ITIL在数据中心运维中的应用
- 低碳哥,笑中带泪的无奈
- 不同时区时间戳是一样的吗_读完预科也能直升二年级?一不小心就成了时间管理大师!...