详解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 相关文章推荐
QUnit jQuery的TDD框架
Nov 04 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
调用jQuery滑出效果时闪烁的解决方法
Mar 27 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
详解基于webpack搭建react运行环境
Jun 01 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 Javascript
JavaScript 跨域之POST实现方法
May 07 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
详解jQuery如何实现模糊搜索
May 10 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
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
原生js二级联动效果
2017/06/20 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python标准库inspect的具体使用方法
2017/12/06 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Python如何根据时间序列数据作图
2020/05/12 Python
手机业务员岗位职责
2013/12/13 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
采购主管岗位职责
2014/02/01 职场文书
学习决心书
2014/03/11 职场文书
村抢险救灾方案
2014/05/09 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
社区先进事迹材料
2014/05/19 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
公司租车协议书
2015/01/29 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书