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 相关文章推荐
javascript延时加载之defer测试
Dec 28 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
jQuery实现dialog设置focus焦点的方法
Jun 10 Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
Javascript 之封装(Package)
Sep 14 Javascript
Vue结合后台导入导出Excel问题详解
Feb 19 Javascript
如何通过setTimeout理解JS运行机制详解
Mar 23 Javascript
JQuery animate动画应用示例
May 14 jQuery
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
javascript实现简单页面倒计时
Mar 02 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
优化PHP代码的53条建议
2008/03/27 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP5函数小全(分享)
2013/06/06 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python线性方程组求解运算示例
2018/01/17 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
pandas的排序和排名的具体使用
2019/07/31 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
开学典礼策划方案
2014/05/28 职场文书
整改报告格式
2014/11/06 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python