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 图片裁剪技巧解读
Nov 15 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
JS验证邮件地址格式方法小结
Dec 01 Javascript
AngularJS入门教程之AngularJS指令
Apr 18 Javascript
微信小程序开发入门基础教程
Apr 19 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
详细介绍解决vue和jsp结合的方法
Feb 06 Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 Javascript
jQuery实现图片切换效果
Oct 19 jQuery
vant组件中 dialog的确认按钮的回调事件操作
Nov 04 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 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 GBK→UTF-8编码转换
2007/05/24 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
js 深拷贝函数
2008/12/04 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
天游软件面试
2013/11/23 面试题
鲜果饮品店创业计划书
2014/01/21 职场文书
个人作风建设总结
2014/10/23 职场文书
实习介绍信范文
2015/05/05 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电