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判断浏览器滚动条位置的方法
May 30 Javascript
js实现倒计时效果(小于10补零)
Mar 08 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
Angular.js实现动态加载组件详解
May 28 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
IntelliJ IDEA 安装vue开发插件的方法
Nov 21 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
Feb 26 Javascript
js实现随机数小游戏
Jun 28 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
Oct 29 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
用mysql内存表来代替php session的类
2009/02/01 PHP
php 表单验证实现代码
2009/03/10 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
Python中使用PIPE操作Linux管道
2015/02/04 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
python excel转换csv代码实例
2019/08/26 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
戴尔英国官网:Dell英国
2017/05/27 全球购物
经典优秀个人求职信分享
2013/12/12 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
自荐信大全
2019/03/21 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android