详解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 嵌套函数指向this对象错误的解决方法
Mar 15 Javascript
用JS实现3D球状标签云示例代码
Dec 01 Javascript
jquery改变disabled的boolean状态的三种方法
Dec 13 Javascript
javascript检测两个数组是否相似
May 19 Javascript
javascript中递归函数用法注意点
Jul 30 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
Jun 09 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 Javascript
Element MessageBox弹框的具体使用
Jul 27 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 Javascript
Java无向树分析 实现最小高度树
Apr 09 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
PHP判断图片格式的七种方法小结
2013/06/03 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
vue中template的三种写法示例
2020/10/21 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
对python中执行DOS命令的3种方法总结
2018/05/12 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
python线程的几种创建方式详解
2019/08/29 Python
python set集合使用方法解析
2019/11/05 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
python三引号如何输入
2020/07/06 Python
python zip()函数的使用示例
2020/09/23 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
银行奉献演讲稿
2014/09/16 职场文书
村党组织公开承诺书
2015/04/30 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB