迅速了解一下ES10中Object.fromEntries的用法使用


Posted in Javascript onMarch 05, 2019

Object.fromEntries 方法就是 entries 的逆操作,作用是将一个键值对数组转化为一个对象

同样的该方法也已经成为 ES10 中 stage4 提案:

迅速了解一下ES10中Object.fromEntries的用法使用

Object.entries

在介绍 fromEntries 之前,回顾一下 entries 的用法。这个方法返回的是对象自身的、可枚举的属性组成的数组:

const obj = { a: '1', b: 2 }
Object.entries(obj)

迅速了解一下ES10中Object.fromEntries的用法使用

也可以通过 new Map 构造函数将对象转为 Map:

new Map(Object.entries(obj))
// Map(2) {"a" => "1", "b" => 2}

迅速了解一下ES10中Object.fromEntries的用法使用

Object.fromEntries

fromEntries 方法则刚好相反,将数组转为对象:

Object.fromEntries([['a', '1'], ['b', 2]])

迅速了解一下ES10中Object.fromEntries的用法使用

当然也可以传入一个 Map 将其转为对象:

const map = new Map().set('a', 1).set('b', 2)

Object.fromEntries(map)

迅速了解一下ES10中Object.fromEntries的用法使用

几个注意事项

当传入的参数中有重复出现的 key:

传入给 fromEntries 的参数,如果有重复的 key 出现,后面的会被采用:

Object.fromEntries([['a', '1'], ['a', '2']])

迅速了解一下ES10中Object.fromEntries的用法使用

虽然 entries 不支持 symbol 作为 key,但 fromEntries 却可以:

Object.fromEntries([[s, 1]])
Object.entries({ s: 1 })

上述代码效果如下,entreis 接收的对象中如果有 symbol 作为 key 会直接被转换为字符串:

迅速了解一下ES10中Object.fromEntries的用法使用

key 为字符串或 symbol 之外的类型会被强制转为字符串:

迅速了解一下ES10中Object.fromEntries的用法使用

他可以接收任何类数组,如 Map 等,甚至是有自定义迭代器的对象:

obj = {}
obj[Symbol.iterator] = function* () {
  yield [1, 11]
  yield [2, 22]
  yield [3, 33]
}

console.dir(Object.fromEntries(obj))

迅速了解一下ES10中Object.fromEntries的用法使用

最后还有只支持创建对象可遍历的属性

应用:过滤属性

定义一个函数,这个函数第一个参数为对象,另外接收其他几个参数作为需要保留的属性

function foo(obj, ...keys) {
  return Object.fromEntries(Object.entries(obj)
    .filter(([key]) => keys.includes(key))
  )
}

console.table(foo({ name: 'oli', age: '12' }, 'name'))

迅速了解一下ES10中Object.fromEntries的用法使用

应用:处理表单

假设我们有这样一组数据:

[{
  name: 'oli',
  age: 12
}, {
  name: 'troy',
  age: 14
}]

如果需要将其填充到 csv、sql 数据库表中,那么只需要如下方法过滤数据:

arr = [{
  name: 'oli',
  age: 12
}, {
  name: 'troy',
  age: 14
}]

obj = Object.fromEntries(
  arr.map(({name, age}) => [name, age])
)

console.table(obj)

迅速了解一下ES10中Object.fromEntries的用法使用

数据过滤完毕后就可以很轻松的粘贴到 Excel 表格或方便的存储到数据库中

应用:交换属性和值

function foo(obj) {
  return Object.fromEntries(Object.entries(obj)
    .map(([key, value]) => [value, key])
  )
}

console.table({ name: 'oli', age: '12' })
console.table(foo({ name: 'oli', age: '12' }))

迅速了解一下ES10中Object.fromEntries的用法使用

还有其他通过使用数组方法来实现的各种功能,这里就不一一展示了

应用:将 url 查询字符串转为对象

query = Object.fromEntries(new URLSearchParams('foo=bar&baz=qux'))
// {foo: "bar", baz: "qux"}

迅速了解一下ES10中Object.fromEntries的用法使用

测试环境

想要尝试的童鞋,需要下载 chrome 测试版,保证 chrome 浏览器版本要大于 73:

迅速了解一下ES10中Object.fromEntries的用法使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
jQuery前台数据获取实现代码
Mar 16 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
Dec 26 Javascript
Javascript显示和隐藏ul列表的方法
Jul 15 Javascript
jQuery手机拨号界面特效代码分享
Aug 27 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
javascript动画之磁性吸附效果篇
Dec 09 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
微信小程序canvas拖拽、截图组件功能
Sep 04 Javascript
详解微信小程序之一键复制到剪切板
Apr 24 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 Javascript
es6数据变更同步到视图层的方法
Mar 04 #Javascript
使用webpack构建应用的方法步骤
Mar 04 #Javascript
详解element-ui中form验证杂记
Mar 04 #Javascript
JS使用数组实现的队列功能示例
Mar 04 #Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 #Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
Mar 04 #Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 #Javascript
You might like
PHP下MAIL的另一解决方案
2006/10/09 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
js 操作符汇总
2014/11/08 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
node文字生成图片的示例代码
2017/10/26 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
Python getopt模块处理命令行选项实例
2014/05/13 Python
SQLite3中文编码 Python的实现
2017/01/11 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
如何理解python中数字列表
2020/05/29 Python
python 如何调用 dubbo 接口
2020/09/24 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
关于期中考试的反思
2014/02/02 职场文书
安全检查管理制度
2014/02/02 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
遗产继承公证书
2014/04/09 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
挂职学习心得体会
2014/09/09 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
银行招聘自荐信
2015/03/06 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
2016年端午节寄语
2015/12/04 职场文书