迅速了解一下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 相关文章推荐
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 Javascript
分页栏的web标准实现
Nov 01 Javascript
JS与C#编码解码
Dec 03 Javascript
jsPDF生成pdf后在网页展示实例
Jan 16 Javascript
js原型继承的两种方法对比介绍
Mar 30 Javascript
动态加载js的方法汇总
Feb 13 Javascript
javascript正则表达式定义(语法)总结
Jan 08 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
EasyUI实现下拉框多选功能
Nov 07 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
Jan 07 Javascript
微信网页登录逻辑与实现方法
Apr 29 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
基于文本的留言簿
2006/10/09 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python 6行代码制作月历生成器
2020/09/18 Python
python如何实现word批量转HTML
2020/09/30 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
个人求职信范文分享
2013/12/13 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
2014年文秘工作总结
2014/11/25 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书