详解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中实现暂停的几篇文章
Mar 04 Javascript
JQuery 学习笔记 element属性控制
Jul 23 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
jquery实现拖拽调整Div大小
Jan 30 Javascript
简介JavaScript中substring()方法的使用
Jun 06 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
jQuery绑定自定义事件的魔法升级版
Jun 30 Javascript
你知道setTimeout是如何运行的吗?
Aug 16 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
JS常见算法详解
Feb 28 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
微信小程序实用代码段(收藏版)
Dec 17 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
极典R601SW收音机
2021/03/02 无线电
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
python算法学习之基数排序实例
2013/12/18 Python
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python2.x与Python3.x的区别
2016/01/14 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
如何用python免费看美剧
2020/08/11 Python
python里反向传播算法详解
2020/11/22 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
乡镇干部先进事迹材料
2014/02/03 职场文书
道路交通安全实施方案
2014/03/12 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
主婚人致辞精选
2015/07/28 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis