厉害了,JavaScript新提案array。groupBy
许多开发人员喜欢Ruby编程语言,因为它具有丰富的标准实用程序库。例如,Ruby中的数组有大量的方法。
不过,我们的JavaScript也在努力,在字符串和数组方面逐步丰富了它的标准库。例如,在以前的文章中,介绍新的array。at()方法。
今天我们在来看新的数组组提案(目前处于第三阶段),它引入了新方法array。groupby()和array。groupbytomap()。它们的polyfills文件可以在corejs库中找到。
接着,我们来看下能从中学到些什么。1。array。groupBy()
假设我们有一个产品列表,其中每个产品都是一个具有2个属性的对象:name和category。constproducts〔{name:apples,category:fruits},{name:oranges,category:fruits},{name:potatoes,category:vegetables}〕;
在上面的示例中,products是一个产品对象数组。
现在,对产品列表执行一个简单的操作,将产品按类别分组。constgroupByCategory{fruits:〔{name:apples,category:fruits},{name:oranges,category:fruits},〕,vegetables:〔{name:potatoes,category:vegetables}〕};
如何从products数组中得到一个类似groupByCategory的数组?
通常的方法是使用array。reduce()来实现,如下所示:constgroupByCategoryproducts。reduce((group,product){const{category}product;group〔category〕group〔category〕??〔〕;group〔category〕。push(product);returngroup;},{});console。log(groupByCategory);{fruits:〔{name:apples,category:fruits},{name:oranges,category:fruits},〕,vegetables:〔{name:potatoes,category:vegetables}〕}
products。reduce((acc,product){。。。})将产品数组还原为一个按类别分组的产品对象。
array。reduce()方法有用且强大,但有时它的可读性并不是最好的。
因为分组数据是常见的事(从SQL中召回groupby?),数组组提案引入了两个有用的方法:array。groupBy()和array。groupByToMap()。
下面介绍如何使用array。groupBy()创建相同的分类分组:constgroupByCategoryproducts。groupBy(product{returnproduct。category;});console。log(groupByCategory);{fruits:〔{name:apples,category:fruits},{name:oranges,category:fruits},〕,vegetables:〔{name:potatoes,category:vegetables}〕}
products。groupBy(product{。。。})返回一个对象,其中每个属性的键是类别名称,值是对应类别的产品数组。
使用products。groupBy()分组比使用product。reduce()代码更少,更容易理解。
array。groupBy(callback)接受一个回调函数,该函数被调用时有3个参数:当前数组项、索引和数组本身。回调函数应该返回一个字符串:你想添加项目的组名。constgroupedObjectarray。groupBy((item,index,array){。。。returngroupNameAsString;});2。array。groupByToMap()
有时你可能想使用Map而不是普通对象。Map的好处是它可以接受任何数据类型作为键,但普通对象只限于字符串和symbol。
恩,如果你想把数据分组到一个Map中,你可以使用array。groupByToMap()方法。
array。groupByToMap(callback)的工作方式与array。groupBy(callback)完全一样,只是它将项目分组到Map中,而不是一个普通的JS对象中。
例如,将产品数组按类别名称分组到一个ap中,执行方法如下。constgroupByCategoryproducts。groupByToMap(product{returnproduct。category;});console。log(groupByCategory);Map(〔〔fruits,〔{name:apples,category:fruits},{name:oranges,category:fruits},〕〕,〔vegetables,〔{name:potatoes,category:vegetables}〕〕)3。总结
如果你想轻松地对数组中的项进行分组(类似于SQL中的GROUPBY),那么欢迎使用新方法array。groupBy()和array。groupByToMap()。
两个函数都接受一个回调函数,该回调函数应返回必须插入当前项的组的键。
array。groupBy()将这些项分组为一个普通的JavaScript对象,而array。groupByToMap()将它们分组为一个Map实例。
如果你想马上使用这些函数,那么使用corejs库提供的polyfill。
作者:AshishLahoti译者:前端小智来源:dmitripavlutin原文:https:dmitripavlutin。comjavascriptarraygroup
C怎么判断大小端模式大小端模式:大端模式:先存放最高有效字节,表现为最高有效字节存储在低地址小端模式:先存放最低有效字节,表现为最低有效字节存储在低地址小端模式便于机器处理,大端模式方便人阅……
2021年假期全部结束的朋友圈文案怎么写?这款便签更适合你2021年的国庆假期刚刚过去不久,很多人都意犹未尽,心中期待着下一次的假期。可是对于2021年来说,全部的法定节假日已经全部过完了!听到这个消息,很多小伙伴都想发布朋友圈来感慨……
linux指令学习总结3自己学习总结文档,有些乱,勿喷1、mv命令详解mv(选项)(参数)剪切,或在同目录下移动重命名1。如果目标文件是文件夹,则源文件直接移动到该文件夹内,名字还是……
谷歌对华为停止应用服务更新华为EMUI升级不再有谷歌服务!根据外媒报道,谷歌将对华为切断安卓关键应用程序和更新的访问,此前华为在中美贸易战中遭受打击。目前华为在美国的出货量相对较少,不过在欧洲和亚洲却拥有庞大的智能手机业务以及出货量,……
全力布局线上市场,vivo与京东合作擦出新火花!3月19日晚,声势浩大的vivoX21新品发布会在浙江乌镇举办,凭借领先的屏幕指纹技术、全面屏外观以及JoviAI助理和众多人工智能应用,vivo掀起了2018年手机竞争的新一……
淘宝运营直通车里面的关键词和标题里的关键词是什么关系?我们都了解,直通车其实就是一个纯粹的关键词推广工具,在这里面我们可以添加不同的宝贝,添加不同的计划,最多的时候我们可以添加200多个关键词,那么有人就要问了,那这200多个关键……
手机app开发从创意到落地要多久?手机app开发从创意到落地要多久?无论是软件开发企业还是用户端企业都十分重视的问题之一。毕竟市场需求变换快,1个月前可能还是流量小生,1个月后却是无人问津的落魄网红,谁能先一步……
凭啥?一双拖鞋上李佳琦直播间14次,爆卖250000双,年销拖鞋都内卷了。文姜雪芬编辑范婷婷踩屎感拖鞋火得猝不及防。杨秘记得,2020年春天,李佳琦的直播间里,一款产品的介绍时间通常是四五分钟,但自家的厚底家居凉……
真的可以边看边赚钱今天正式提钱了,哈哈,看新闻看视频真的可以赚钱。今天看了一眼有40多块钱,选择支付宝提钱30元,这30多块买点肉不香吗?赶紧下载吧。这是真正的边消遣边有收益。其实以前一直……
为了解放双手,我入手了这款小洁扫地机器人,看看它到底如何对于大多数人来说,购买扫地机器人就是为了解放双手,帮助自己分担大部分家居地面清洁工作。面对市面上那么多的扫地机器人,我们又该如何选择呢?我在这给大家推荐一款性价比最优的扫拖机器……
前沿地带从量子计算到量子互联网资本实验室今日创新观察聚焦前沿科技创新与传统产业升级齐达当我们进入互联网时代,科技进步和社会发展就建立在了数据与计算能力的基础之上。庞大的数据量与快速的……
苹果汽车即将亮相续航1287km突破历史上限在去年年底,台湾《经济日报》发布新闻称,AppleCar将在2021年9月正式亮相。随着时间的推进,有外媒曝光了一组苹果汽车的假想图,虽然没有消息证明这些图片和最终量产车之间有……