详解JavaScript中数组的reduce方法


Posted in Javascript onDecember 02, 2016

介绍

我们先来看看这个方法的官方概述:reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。

你一定也和我一样看的有点迷糊,其实reduce接收的就是一个回调函数,去调用数组里的每一项,直到数组结束。

我们来举个例子大家就很明白了。

假设我有一串数组,数组里放的全是数字,我要算出这些数字的总和是多少。正常情况下我们会循环,然后一个个加,有了reduce就不用那么麻烦了,只用一行代码。

var total = [0,1,2,3,4].reduce((a, b)=>a + b); //10

这个方法是如何工作的呢?

reduce接受一个函数,函数有四个参数,分别是:

     1、上一次的值;

     2、当前值;

     3、当前值的索引;

     4、数组;

我们还是以上面那个数组为例,把这几个参数打印出来看看:

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){
 return previousValue + currentValue;
});

得到的结果是:

详解JavaScript中数组的reduce方法

分析一下这个结果,这个回调函数共调用了4次,因为第一次没有previousValue,所以直接从数组的第二项开始,一只调用到数组结束。

reduce还有第二个参数,我们可以把这个参数作为第一次调用callback时的第一个参数,上面这个例子因为没有第二个参数,所以直接从数组的第二项开始,如果我们给了第二个参数为5,那么结果就是这样的:

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){
 return previousValue + currentValue;
},5);

详解JavaScript中数组的reduce方法

第一次调用的previousValue的值就用传入的第二个参数代替,函数被调用了5次,也就是数组的length

reduce可以帮助我们轻松的完成很多事,除了累加,还有扁平化一个二维数组:

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
 return a.concat(b);
}, []);
// flattened == [0, 1, 2, 3, 4, 5]

总结

我暂时能想到的常用的就这两个,不过肯定还有很多地方能用到啦。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
jquery获取input表单值的代码
Apr 19 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
Nov 30 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
Oct 29 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
推荐4个原生javascript常用的函数
Jan 12 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
浅谈javascript中的Function和Arguments
Aug 30 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
May 09 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
Nov 13 Javascript
jquery传参及获取方式(两种方式)
Feb 13 jQuery
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
基于javascript实现按圆形排列DIV元素(二)
Dec 02 #Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 #Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 #Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 #Javascript
关于Function中的bind()示例详解
Dec 02 #Javascript
bootstrap模态框消失问题的解决方法
Dec 02 #Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 #Javascript
You might like
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
利用python在excel中画图的实现方法
2020/03/17 Python
执行Python程序时模块报错问题
2020/03/26 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
职业技术学校毕业生推荐信
2013/12/03 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
护士辞职信模板
2014/01/20 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
节约能源标语
2014/06/17 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
2015年英语教学工作总结
2015/05/25 职场文书