详解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 相关文章推荐
javascript arguments 传递给函数的隐含参数
Aug 21 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 Javascript
javascript 循环调用示例介绍
Nov 20 Javascript
jQuery中clone()方法用法实例
Jan 16 Javascript
JS实现的左侧竖向滑动菜单效果代码
Oct 19 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
JS无缝滚动效果实现方法分析
Dec 21 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
Jun 01 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
vue中是怎样监听数组变化的
Oct 24 Javascript
js实现筛选功能
Nov 24 Javascript
jQuery实现可以扩展的日历
Dec 01 jQuery
基于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
笑谈配置,使用Smarty技术
2007/01/04 PHP
php SQL之where语句生成器
2009/03/24 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
JPA的特点
2014/10/25 面试题
大学军训感言1000字
2014/02/25 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
《泉水》教学反思
2014/04/11 职场文书
施工安全责任书范本
2014/07/24 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
小学生优秀评语
2014/12/29 职场文书
监考失职检讨书
2015/01/26 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android