迅速了解一下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 相关文章推荐
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
第一次接触JS require.js模块化工具
Apr 17 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
浅谈pc端rem字体设置的问题
Aug 03 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 Javascript
vue-router 起步步骤详解
Mar 26 Javascript
express启用https使用小记
May 21 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
分享15个Webpack实用的插件!!!
Mar 31 Javascript
Vue实现动态查询规则生成组件
May 27 Vue.js
Moment的feature导致线上bug解决分析
Sep 23 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中用正则表达式清除字符串的空白
2011/01/17 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
浅谈Python中的数据类型
2015/05/05 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
python逆序打印各位数字的方法
2018/06/25 Python
python 获取等间隔的数组实例
2019/07/04 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
超市采购员岗位职责
2014/02/01 职场文书
计算机系本科生求职信
2014/05/31 职场文书
拓展策划方案
2014/06/03 职场文书
典型事迹材料范文
2014/12/29 职场文书
行政处罚决定书
2015/06/24 职场文书
教育教学读书笔记
2015/07/02 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
css3 选择器
2022/05/11 HTML / CSS