Javascript面试经典套路reduce函数查重


Posted in Javascript onMarch 23, 2017

今天在偶然间查看到了一段代码,代码使用了很短的篇幅完成了字符串统计相同字符次数这个经典面试题,其中用到了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 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
js查错流程归纳
May 04 Javascript
在JS方法中返回多个值的方法汇总
May 20 Javascript
js实现表单多按钮提交action的处理方法
Oct 24 Javascript
实例讲解JavaScript中的this指向错误解决方法
Jun 13 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
微信js-sdk界面操作接口用法示例
Oct 12 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 Javascript
vue数据更新UI不刷新显示的解决办法
Aug 06 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 #jQuery
vue.js实现含搜索的多种复选框(附源码)
Mar 23 #Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 #Javascript
JS实现两周内自动登录功能
Mar 23 #Javascript
面试常见的js算法题
Mar 23 #Javascript
Vue.Js中的$watch()方法总结
Mar 23 #Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 #Javascript
You might like
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
PHP学习笔记之session
2018/05/06 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
javascript数组排序汇总
2015/07/07 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
Python中的rjust()方法使用详解
2015/05/19 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python定时任务 sched模块用法实例
2019/11/04 Python
Python新手学习装饰器
2020/06/04 Python
python中if嵌套命令实例讲解
2021/02/25 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
男方父母婚礼答谢词
2014/01/25 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
调查研究项目计划书
2014/04/29 职场文书
员工生日活动方案
2014/08/24 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android