详解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.each()用法分享
Jul 31 Javascript
jQuery setTimeout()函数使用方法
Apr 07 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
Sep 22 Javascript
3种js实现string的substring方法
Nov 09 Javascript
JS动态创建元素的两种方法
Apr 20 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
解决vue attr取不到属性值的问题
Sep 18 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
Jan 21 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 Javascript
JavaScript实现多文件下载方法解析
Aug 07 Javascript
swiperjs实现导航与tab页的联动
Dec 13 Javascript
基于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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
php中final关键字用法分析
2016/12/07 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
Python常用模块用法分析
2014/09/08 Python
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python读写配置文件的方法
2015/06/03 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
jupyter notebook 多行输出实例
2020/04/09 Python
python 元组和列表的区别
2020/12/30 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
会计电算化个人求职信范文
2014/01/24 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技