详解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 03 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
详解VueJs异步动态加载块
Mar 09 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 jQuery
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
Sep 21 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
JavaScript知识点整理
2015/12/09 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
python实现随机梯度下降法
2020/03/24 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
Ejb技术面试题
2015/04/29 面试题
工作保证书范文
2014/04/29 职场文书
学习型班组申报材料
2014/05/31 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis
Python echarts实现数据可视化实例详解
2022/03/03 Python