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 相关文章推荐
基于jquery的页面划词搜索JS
Sep 14 Javascript
JS解决ie6下png透明的方法实例
Aug 02 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
JS图片自动轮换效果实现思路附截图
Apr 30 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
jQuery的实例及必知重要的jQuery选择器详解
May 20 Javascript
JS实现的打字机效果完整实例
Jun 20 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
Mar 05 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 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保存Base64图片base64_decode的问题整理
2019/11/04 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
关于微信小程序登录的那些事
2019/01/08 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
Python中函数的用法实例教程
2014/09/08 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python yield 使用浅析
2015/05/28 Python
使用Python写CUDA程序的方法
2017/03/27 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
日语系毕业生推荐信
2013/11/11 职场文书
教师档案管理制度
2014/01/23 职场文书
趣味游戏活动方案
2014/02/07 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
《理想》教学反思
2014/02/17 职场文书
财务总监管理职责范文
2014/03/09 职场文书
环保倡议书怎么写
2014/05/16 职场文书
青年文明号申报材料
2014/12/23 职场文书
篮球拉拉队口号
2015/12/25 职场文书