JavaScript之典型高阶函数
来源:互联网 发布:域名后缀排行榜 编辑:程序博客网 时间:2024/06/10 12:50
转自:cnblogs 发布者: html5cn
几个函数
这几个方法均为javascript 1.6 数组新增的方法。是很典型的functional 函数,当然也非常实用。下面是functional的定义并不来自javascript。
filter:接受一个集合Xs(X表示类型,s表示集合),一个谓词,这个谓词是从X到bool的映射(函数)。然后过虑这个集合,并返回谓词为true的元素组成的集合。下面是简单的实现:
1 function filter(arr,callback){2 var i,out=[];3 for(i=0;i<arr.length;i++){4 if(callback(arr[i]))5 out.push(arr[i]);6 }7 return out;8 }
再加一个简单的测试:
1 var arr = [1,2,3,4,5,6,7,8,9,10];2 var even = function(item){3 if(typeof item !== "number") return false;4 return !(item & 1);5 };6 var filtered = filter(arr,even);7 console.log(filtered);
结果:
2,4,6,8,10
map:接受一个集合Xs,一个函数f,然后把Xs集合中每一个元素按照顺序使用f映射,并返回集合fx1, fx2, fx3 ... f xn。实现如下:
1 function map(arr,callback){2 var i,l= arr && arr.length || 0,out = new Array(l);3 for(i=0;i<l;i++)4 out[i]=callback(arr[i]);5 return out;6 }
测试一下:
1 var arr = [1,2,3,4,5,6,7,8,9,10];2 var addTen = function(item){3 return item + 10;4 };5 var mapAdded = map(arr,addTen);6 console.log(mapAdded);
结果:
11,12,13,14,15,16,17,18,19,20
另外还有forEach,every和some三个函数在javascript 1.6中出现。但在使用过程中感觉还是缺少一个有力的函数,它就是折叠函数(fold)。正所谓map-reduce,有了map而没有"reduce"岂不是很扫兴?下面就来看看这个”reduce“。
Reduce的实现
上面说的reduce其实也就是折叠函数(fold)。它接受一个Xs集合,一个二元操作符f。然后将f插入到集合中的每两个相邻元素之间。举个例子,fold plus [1,2,3,4] 意即 1+2+3+4。为了更加精确,通常需要一个”起始元素“作为f最开始时的第二个参数。例如 fold plus [1,2,3,4] 意即 (1+(2+(3+(4+0)))。下面是实现:
1 function fold(arr,callback,b){2 var i,x;3 if(b) x=b,i=0;4 else x=arr[0],i=1;5 for(;i<arr.length;i++)6 x=callback(arr[i],x);7 return x;8 }
测试:
var arr = [1,2,3,4,5,6,7,8,9,10];var plus = function(a,b){ return a+b;};var foldPlus = fold(arr,plus,0);console.log(foldPlus);
结果:
55
这个函数在ECMAScript 5中名字就叫reduce,而函数式里面通常称做fold而已,这是很形象的名字。
总结
其实上面在实现这些functional函数的时候编写风格并不是函数式的,因为javascript 语言有具有循环语句。如果没有循环语句呢?留给下一次探索吧。
- JavaScript之典型高阶函数
- JavaScript之典型高阶函数
- JavaScript函数之高阶函数
- JavaScript基础之高阶函数
- JavaScript-高阶函数
- JavaScript学习之路08_高阶函数
- 高阶函数与JavaScript
- javascript 中的高阶函数
- JavaScript 高阶函数filter
- 【javascript】JavaScript高阶函数介绍
- 函数-Javascript中的高阶函数介绍
- 记录一下javascript中的高阶函数
- JavaScript数组的高阶函数
- javaScript 高阶函数 map/reduce/filter
- Javascript中的高阶函数介绍
- JavaScript(五)高阶函数sort
- JavaScript设计模式--高阶函数
- JavaScript中的常用高阶函数
- ubuntu ps 查找并停掉相关服务
- 关于oracle中clob字段查询的问题
- 为学论坛开张了
- Peter Norvig 自学编程,十年磨一剑
- Luke
- JavaScript之典型高阶函数
- ”对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成“解决办法
- 一只特立独行的猪--当年明月,坚持的力量
- 有时间一天看一次
- Oracle学习笔记-实例
- This site requires JavaScript and Cookies to be enabled的解决方法
- 杂谈
- nohup命令参考
- http://archive.cert.uni-stuttgart.de/openpgp/2003/08/msg00014.html