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 HashTable
Jan 22 Javascript
jquery multiSelect 多选下拉框
Jul 09 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
Jun 20 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
Jan 09 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
JavaScript实现图片瀑布流和底部刷新
Jan 02 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
vue计算属性和监听器实例解析
May 10 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
May 07 Javascript
Vue自定义组件双向绑定实现原理及方法详解
Sep 03 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
DOMXML函数笔记
2006/10/09 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
javascript的正则匹配方法学习
2016/02/24 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
分析Python中解析构建数据知识
2018/01/20 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
Python中捕获键盘的方式详解
2019/03/28 Python
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
建筑学推荐信
2013/11/03 职场文书
销售找工作求职信
2013/12/20 职场文书
心理健康课教学反思
2014/02/13 职场文书
人大调研汇报材料
2014/08/14 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
培根随笔读书笔记
2015/07/01 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
使用Python开发冰球小游戏
2022/04/30 Python
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL