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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
Jquery调用webService远程访问出错的解决方法
May 21 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
微信小程序合法域名配置方法
May 06 Javascript
javascript 设计模式之组合模式原理与应用详解
Apr 08 Javascript
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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
python——全排列数的生成方式
2020/02/26 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
python re.match()用法相关示例
2021/01/27 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
高级销售员求职信
2013/10/25 职场文书
《社戏》教学反思
2014/04/15 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
人事聘任通知
2015/04/21 职场文书
雷锋电影观后感
2015/06/10 职场文书
导游词之湖北武当山
2019/09/23 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python