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

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. 递归和迭代的区别是什么,各有什么优缺点?
  2. SQL Server 2005——下一代的数据管理和分析软件[转]
  3. java二叉树的运用
  4. Win7 x64 PL/SQL 连接 Oralce 提示 Could not initialize %ORACLE_HOME%\bin\oci.dll
  5. 多语言ASR?没有什么听不懂,15种语言我全都要
  6. spring+struts2+mybatis
  7. C++自学07:字符串(char/string/wchar_t/char16_t/char32_t)
  8. 变相解决Unidac无法向Postgresql传游标RefCursor的问题
  9. MySQL 创建主外键
  10. access mysql并发_多用户同时使用ACCESS
  11. 掌握STC单片机程序烧录方法只需要三步走
  12. TCP/IP报文头部整理
  13. Proteus —— 电路仿真软件
  14. 【三维激光扫描】第二章:国内外三维激光扫描设备简介
  15. web应用开发相关技术,CSS盒模型概述
  16. CVE-2020-1938/CNVD-2020-10487:Apache Tomcat 远程执行代码漏洞
  17. Mac电脑系统设置WIWF热点
  18. [转帖] 中国手机设计公司IDH 大史记
  19. 在阿里的一年,让我的技术思维有了翻天覆地的变化
  20. js中foreach有三种写法,你知道吗

热门文章

  1. 音响是如何把微弱声音放大呢
  2. c语言编程 显示动物,C语言编程 猜动物
  3. hugegraph hubble安装、配置与创建图
  4. hubble.net使用一
  5. [数据库原理] 理清数据库范式(1NF、2NF、3NF、BCNF)
  6. 【深度学习】使用kaggle提供的免费GPU在线训练模型
  7. 基于MATLAB/SIMULINK工业锅炉燃烧过程控制系统的设计与仿真
  8. 2019年报表工具软件怎么选
  9. IDEA code template配置和参数详解
  10. 上帝之光(God Ray)