详解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 相关文章推荐
js比较和逻辑运算符的介绍
Mar 10 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
jquery实现下拉框功能效果【实例代码】
May 06 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
jQuery数组处理函数整理
Aug 03 Javascript
14 个折磨人的 JavaScript 面试题
Aug 08 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
zTree树形菜单交互选项卡效果的实现方法
Dec 25 Javascript
微信小程序实现文字无限轮播效果
Dec 28 Javascript
JS替换字符串中指定位置的字符(多种方法)
May 28 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
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
javascript数据类型详解
2017/02/07 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
深入理解Python中字典的键的使用
2015/08/19 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
用python进行视频剪辑
2020/11/02 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
个人简历的自荐信
2013/10/23 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
计算机专业求职信
2014/06/02 职场文书
2014年环保局工作总结
2014/12/11 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
2015年采购部工作总结
2015/04/23 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
合作合同协议书
2016/03/21 职场文书
导游词之太原天龙山
2020/01/02 职场文书