JavaScript学习之路08_高阶函数
2015-11-22 17:26
639 查看
高阶函数
这是一个简单地高阶函数:
什么是高阶函数?
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
map/reduce
map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果.
map除了这个功能,还有其他的功能没?当然后,除了可以完成简单地运算,还可以完成复杂的函数,比如将Array的所有数字都变成字符串,并且只需要一句代码即可完成。
reduce高阶函数
reduce的用法:
Array的reduce()把一个函数作用在这个Array的[x1, x2, x3…]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:
filter高阶函数
filter用法:
用于把Array的某些元素过滤掉,然后返回剩下的元素。
和map()类似,Array的filter()也接收一个函数。和map()不同是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
sort高阶函数
这是一个简单地高阶函数:
//函数作为参数 function add(x, y, fun) { return fun(x)+fun(y) }; //调用函数 add(-5, 6, Math.abs); 11
什么是高阶函数?
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
map/reduce
map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果.
function pow(x) { return x*x }; var arr = [1,2,3,4,5,6,7,8]; //调用map函数,它的返回结果是一个新的Array arr.map(pow); [1, 4, 9, 16, 25, 36, 49, 64]
map除了这个功能,还有其他的功能没?当然后,除了可以完成简单地运算,还可以完成复杂的函数,比如将Array的所有数字都变成字符串,并且只需要一句代码即可完成。
arr.map(String); ["1", "2", "3", "4", "5", "6", "7", "8"]
reduce高阶函数
reduce的用法:
Array的reduce()把一个函数作用在这个Array的[x1, x2, x3…]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) //当然,这个函数的功能如果是累加,那么就是相加,如果使相乘,那么就是累积
//实现相加 var arr = [1,3,5,7,9]; arr.reduce(function(x,y){ return x+y; }); 25 //实现相乘 var arr = [1,2,3,4]; arr.reduce(function(x, y){ return x*y; }); 24 //传递一个数组,实现累积 function produce(arr){arr.reduce(function(x,y){return x*y;});} //测试 if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) { alert('测试通过!'); } else { alert('测试失败!'); } //将数组中的数字拼接成一个连数 var arr = [1,3,5,7,9]; arr.reduce(function(x, y){ return x*10+y; }); //运行结果如下 13579
filter高阶函数
filter用法:
用于把Array的某些元素过滤掉,然后返回剩下的元素。
和map()类似,Array的filter()也接收一个函数。和map()不同是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
**** var arr = [1,2,3,4,6,7,8,0]; arr.filter(function(x){ //将奇数过滤掉 return x%2!==1; }); //运行结果 [2, 4, 6, 8, 0] //过滤空元素 var arr = ['hello', '', null, 'world']; arr.filter(function(x){return x && x.trim();}); ["hello", "world"] //返回的是一个布尔类型的值,要么是true,要么是false,如果返回的不是布尔类型,就会报错 arr.filter(function(x){return x.trim();}); **案例:** 请尝试用filter()筛选出素数 return arr.filter(function (x) { var filter = 1; for (var i = 2; i < x; i++) { if ((x / i) % 1 === 0) { filter = 0; } } if (x === 1) { filter = 0; } return filter; });
sort高阶函数
var arr = [1,2,10,3]; arr.sort(); [1, 10, 2, 3] 为什么呢? 因为Array的sort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。 但是可以自定义,所以如下: arr.sort(function(x, y){ if(x>y) { return -1; } if(x<y){ return 1; } }); [10, 3, 2, 1] //sort方法改变了原来数组的顺序 arr; [10, 3, 2, 1] //定义一个数组 var arr = ['google', 'apple', 'microsoft']; //进行排序 arr.sort(function(x, y){ s1 = x.toUpperCase(); s2 = y.toUpperCase(); if(s1<s2){ return -1; } if(s1>s2){ return 1; } }); ["apple", "google", "microsoft"] //定义一个数组 var arr = [1,4,2]; //进行排序 var arr2 = arr.sort(); //改变了原来数组的顺序 arr; [1, 2, 4] arr2; [1, 2, 4] //两个数组比较相等,说明是同一个对象 arr === arr2; true
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- IE8开发人员工具教程(二)
- Mootools 1.2教程 函数