详解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 相关文章推荐
让FireFox支持innerText的实现代码
Dec 01 Javascript
js实现点击链接后窗口缩小并居中的方法
Mar 02 Javascript
JQuery+CSS实现图片上放置按钮的方法
May 29 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
简介JavaScript中的italics()方法的使用
Jun 08 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
js与jquery分别实现tab标签页功能的方法
Nov 18 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
Jul 24 Javascript
结合mint-ui移动端下拉加载实践方法总结
Nov 08 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
Element Backtop回到顶部的具体使用
Jul 27 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
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
Node.js编码规范
2014/07/14 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
详解JavaScript中的六种错误类型
2017/09/21 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
python写一个md5解密器示例
2018/02/23 Python
python实现比较文件内容异同
2018/06/22 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
python多线程和多进程关系详解
2020/12/14 Python
Python 图片处理库exifread详解
2021/02/25 Python
database面试题
2013/03/28 面试题
解释一下钝化(Swap out)
2016/12/26 面试题
自我评价怎么写好呢?
2013/12/05 职场文书
鸿星尔克广告词
2014/03/21 职场文书
安踏广告词改编版
2014/03/21 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
MySQL索引失效的典型案例
2021/06/05 MySQL
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android