13-javascript map/reduce
来源:互联网 发布:网络教育学士学位证 编辑:程序博客网 时间:2024/05/29 18:00
如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。
map
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下:
由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的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
要把[1, 3, 5, 7, 9]变换成整数13579,reduce()也能派上用场:
var arr = [1, 3, 5, 7, 9];arr.reduce(function (x, y) { return x * 10 + y;}); // 13579
如果我们继续改进这个例子,想办法把一个字符串13579先变成Array——[1, 3, 5, 7, 9],再利用reduce()就可以写出一个把字符串转换为Number的函数。
- 13-javascript map/reduce
- JavaScript(Map/Reduce)
- javascript 的 map/reduce
- JavaScript数组map()、reduce()方法
- JavaScript--map、reduce、filter、sort
- JavaScript数组forEach()、map()、reduce()方法
- javaScript 高阶函数 map/reduce/filter
- javascript学习——map/reduce
- Javascript数组---map(),reduce()方法的区别
- JavaScript高阶函数map/reduce
- JavaScript中的map和filter、reduce方法
- map/reduce
- map reduce
- Map/Reduce
- map reduce
- Map Reduce
- map reduce
- map-reduce
- Swift 4.0 中的 open,public,internal,fileprivate,private
- springcloud配置中心(config)
- javaSE 常用系统类 包 访问控制符
- Automatic Android* Testing with UiAutomator
- wireless-tools
- 13-javascript map/reduce
- Android Api demo系列(24) (Graphics>RoundRects(讲解的是GradientDrawable的使用))
- 性格分析工具
- vue安装及创建项目
- oracle 的csv 导入到mongodb 部分字段会转换成int numberlong 修改方式
- 浏览器cannot read property 'msie' of undefined的解决方法
- Java面试题全集(上)
- JPA访问mysql时候出现了某个字段与数据库关键字重复
- vue嵌套路由