JavaScript之map reduce_动力节点Java学院整理


Posted in Javascript onJune 29, 2017

如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。

map

举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下:

JavaScript之map reduce_动力节点Java学院整理

由于map()方法定义在JavaScript的Array中,我们调用Arraymap()方法,传入我们自己的函数,就得到了一个新的Array作为结果:

function pow(x) {
  return x * x;
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]

map()传入的参数是pow,即函数对象本身。
你可能会想,不需要map(),写一个循环,也可以计算出结果:

var f = function (x) {
  return x * x;
};

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var result = [];
for (var i=0; i<arr.length; i++) {
  result.push(f(arr[i]));
}

的确可以,但是,从上面的循环代码,我们无法一眼看明白“把f(x)作用在Array的每一个元素并把结果生成一个新的Array”。
所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把Array的所有数字转为字符串:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']

只需要一行代码。

reduce

再看reduce的用法。Array的reduce()把一个函数作用在这个Array[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

比方说对一个Array求和,就可以用reduce实现:

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
  return x + y;
}); // 25

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.ui.draggable中文文档(原文翻译)
Nov 15 Javascript
JavaScript中对象property的删除方法介绍
Dec 30 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 Javascript
javascript中的 object 和 function小结
Aug 14 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
JS中的三个循环小结
Jun 20 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
Angular ng-animate和ng-cookies用法详解
Apr 18 Javascript
浅析vue-router实现原理及两种模式
Feb 11 Javascript
ES2020让代码更优美的运算符 (?.) (??)
Jan 04 Javascript
教你部署vue项目到docker
Apr 05 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 #Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 #Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 #Javascript
You might like
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php二维码生成
2015/10/19 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
详解redux异步操作实践
2018/08/15 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
用Python编写简单的定时器的方法
2015/05/02 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
英语专业职业生涯规划范文
2014/03/05 职场文书
幼儿教师求职信
2014/05/24 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
小学教师师德整改措施
2014/09/29 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
社会实践单位意见
2015/06/05 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python