源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript之map reduce_动力节点Java学院整理

  • 时间:2020-02-07 00:03 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript之map reduce_动力节点Java学院整理
如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。 [b]map[/b] 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: [img]http://files.jb51.net/file_images/article/201706/2017629105112384.jpg?2017529105121[/img] 由于[b]map()[/b]方法定义在JavaScript的[b]Array[/b]中,我们调用[b]Array[/b][b]map()[/b]方法,传入我们自己的函数,就得到了一个新的[b]Array[/b]作为结果:
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]

[b]map()[/b]传入的参数是[b]pow[/b],即函数对象本身。 你可能会想,不需要[b]map(),[/b]写一个循环,也可以计算出结果:
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”。 所以,[b]map()[/b]作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把[b]Array[/b]的所有数字转为字符串:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']
只需要一行代码。 [b]reduce[/b] 再看reduce的用法。Array的[b]reduce()[/b]把一个函数作用在这个[b]Array[/b]的[b][x1, x2, x3...][/b]上,这个函数必须接收两个参数,[b]reduce()[/b]把结果继续和序列的下一个元素做累积计算,其效果就是:
[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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部