今天在偶然间查看到了一段代码,代码使用了很短的篇幅完成了字符串统计相同字符次数这个经典面试题,其中用到了reduce这个方法,网上查了查,没有查到什么有价值的东西,导致浪费了我一些时间才看懂,现将我的思路整理如下:

原代码:
var arr="qweqrq"
var info= arr.split('').reduce((a,b)=>
(a[b]++ || (a[b]=1),a)
,{})
console.log(info)
代码思路是这样的,先将字符串arr通过split方法切割成数组,然后使用reduce,这个方法干了什么呢,分为这几步:
1.首先reduce会接收一个callback来对数组里的每一个元素执行,如果有第二个参数如上例:{}。,那么callback将会使用这个{}作为参数来和数组中的第一个元素一同传入callback;
2.传入参数之后,会进行一个与门短路操作,也可以叫默认值操作,当a[b]++成真,则返回a[b]。而这里的a为{},b为"q",很明显a中并没有b,执行a[b]=1,那么就会给a[b]赋值为1,后面是一个逗号表达式,所以会返回有了a[b]:1这样属性的a对象;
与门短路操作:如果第一个操作数的值为true,进行短路操作,直接产生第一个操作数的值。如果为false,则产生第二个操作数的值。
逗号表达式:逗号表达式的一般形式是:表达式1,表达式2,表达式3……表达式n。逗号表达式的求解过程是:先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。
3.之后要说下reduce函数,它可以将之前一次执行后返回的结果作为参数继续和之后的元素一同传入callback执行,相当于fn(fn(fn(fn(a,b),c),d),e),fn即为callback;
4.在本例中,因为有第二个参数{}传入,所以callback执行了6次。相当于对数组中每一个元素都进行了录入和查重操作,比如当callback运行到第四次,这时的a是{q:1,w:1,e:1},执行callback,a[b]即a['q']存在,执行a['q']++,a['q']值为2,以此类推,最后得到的就是一个以数组每个元素为属性名,出现次数为属性值的对象。
需要注意的是,reduce是es5推出的方法,ie8及以下都不兼容。
以上所述是小编给大家介绍的Javascript面试经典套路reduce函数查重,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# javascript
# reduce
# js
# 面试套路
# 如何在面试中手写出javascript节流和防抖函数
# JavaScript基础学习之splice()函数详解
# JavaScript函数式编程(Functional Programming)组合函数(Compos
# JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
# 「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
# JavaScript前端面试组合函数
# 第一个
# 第二个
# 值为
# 小编
# 的是
# 组中
# 是一个
# 都不
# 将会
# 在此
# 是这样
# 以此类推
# 给大家
# 它可以
# 什么呢
# 会给
# 几步
# 很明显
# 干了
# 有价值
相关文章:
表情包在线制作网站免费,表情包怎么弄?
网站制作网站,深圳做网站哪家比较好?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
实现虚拟支付需哪些建站技术支撑?
制作旅游网站html,怎样注册旅游网站?
建设网站制作价格,怎样建立自己的公司网站?
建站主机选哪家性价比最高?
如何零成本快速生成个人自助网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
中山网站制作网页,中山新生登记系统登记流程?
如何用好域名打造高点击率的自主建站?
如何在景安云服务器上绑定域名并配置虚拟主机?
建站之星展会模版如何一键下载生成?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
Android使用GridView实现日历的简单功能
如何通过可视化优化提升建站效果?
javascript中的try catch异常捕获机制用法分析
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何正确下载安装西数主机建站助手?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何用美橙互联一键搭建多站合一网站?
如何在Windows环境下新建FTP站点并设置权限?
如何通过虚拟机搭建网站?详细步骤解析
利用JavaScript实现拖拽改变元素大小
黑客入侵网站服务器的常见手法有哪些?
,网页ppt怎么弄成自己的ppt?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
怎么将XML数据可视化 D3.js加载XML
建站之星云端配置指南:模板选择与SEO优化一键生成
网站微信制作软件,如何制作微信链接?
,sp开头的版面叫什么?
常州自助建站工具推荐:低成本搭建与模板选择技巧
香港服务器选型指南:免备案配置与高效建站方案解析
如何快速建站并高效导出源代码?
宝塔建站助手安装配置与建站模板使用全流程解析
如何在万网自助建站中设置域名及备案?
制作门户网站的参考文献在哪,小说网站怎么建立?
,在苏州找工作,上哪个网站比较好?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在IIS7中新建站点?详细步骤解析
如何通过西部建站助手安装IIS服务器?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何在腾讯云免费申请建站?
详解jQuery停止动画——stop()方法的使用
江苏网站制作公司有哪些,江苏书法考级官方网站?
音响网站制作视频教程,隆霸音响官方网站?
C#如何序列化对象为XML XmlSerializer用法
*请认真填写需求信息,我们会在24小时内与您取得联系。