详解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的ajax基础上的超强GridView展示
Sep 18 Javascript
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
js+html5绘制图片到canvas的方法
Jun 05 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
Aug 14 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
Oct 09 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
Oct 26 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 Javascript
WebRTC记录音视频流(web技术分享)
Feb 24 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
php 读取文件乱码问题
2010/02/20 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
lib.utf.js
2007/08/21 Javascript
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
Ext面向对象开发实践(续)
2008/11/18 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python实现感知机(PLA)算法
2017/12/20 Python
Python模块的加载讲解
2019/01/15 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
晚宴邀请函范文
2014/01/15 职场文书
销售经理工作职责
2014/02/03 职场文书
二年级小学生评语
2014/04/21 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
质检员岗位职责
2015/02/03 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书