详解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 drag拖动代码
Dec 09 Javascript
jquery入门—编写一个导航条(可伸缩)
Jan 07 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
Apr 11 Javascript
JavaScript监听手机物理返回键的两种解决方法
Aug 14 Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
说说Vuex的getters属性的具体用法
Apr 15 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
Nov 29 Javascript
node.js Promise对象的使用方法实例分析
Dec 26 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中文字符串截取方法实例总结
2014/09/30 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
零件设计自荐信范文
2013/11/27 职场文书
主题党日活动总结
2014/07/08 职场文书
西游记读书笔记
2015/06/25 职场文书
企业宣传语大全
2015/07/13 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript