迅速了解一下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 相关文章推荐
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
Mar 14 Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
Aug 12 Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
JS中this的指向以及call、apply的作用
May 06 Javascript
vue自定义tap指令及tap事件的实现
Sep 18 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
详解JavaScript 的执行机制
Sep 18 Javascript
关于JavaScript轮播图的实现
Nov 20 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基础知识:类与对象(5) static
2006/12/13 PHP
php中常用编辑器推荐
2007/01/02 PHP
推荐一篇入门级的Class文章
2007/03/19 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
PHP实现变色验证码实例
2014/01/06 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
php无限级分类实现方法分析
2016/10/19 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
证婚人经典证婚词
2014/01/09 职场文书
闭幕式主持词
2014/04/02 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
React如何创建组件
2021/06/27 Javascript
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android
为Centos安装指定版本的Docker
2022/04/01 Servers