详解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 request函数 用来获取url参数
May 17 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 Javascript
使用CamanJS在Web页面上处理图像的技巧
Aug 18 Javascript
jQuery给元素添加样式的方法详解
Dec 30 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
May 12 Javascript
AngularJS $http模块POST请求实现
Apr 08 Javascript
JS基于正则表达式的替换操作(replace)用法示例
Apr 28 Javascript
Vue按需加载的具体实现
Dec 02 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
May 21 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 Javascript
JS监听Esc 键触发事键
Apr 14 Javascript
浅析JavaScript中的变量提升
Jun 01 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中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python生成随机图形验证码详解
2017/11/08 Python
Python批量发送post请求的实现代码
2018/05/05 Python
python获取中文字符串长度的方法
2018/11/14 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
通过Python实现一个简单的html页面
2020/05/16 Python
详解Scrapy Redis入门实战
2020/11/18 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
database面试题
2013/03/28 面试题
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
JAVA程序员自荐书
2014/01/30 职场文书
班训口号大全
2014/06/18 职场文书
庐山导游词
2015/02/03 职场文书
小平您好观后感
2015/06/09 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript