本文是笔者在看廖雪峰老师JavaScript教程时的个人总结
高阶函数
一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数
1.高阶函数之map:
此时我们有一个数组和一个接受一个参数并返回一个数的函数。我们需要把这个数组的每一个值在这个函数上走一遍,从而得到一个新数组。此时就需要map了
var a = [1,2,3,4,5,6];
var b = []
var fun = function(x)
{
return x * x;
}
b = a.map(fun)
alert(b) //1 4 9 16 25 36
2.高阶函数之reduce:
此时我们有一个数组和一个接受两个参数并返回一个数的函数。我们需要把这个数组的每两个值在这个函数上走一遍变成一个值,然后再让这个值继续和下一个值走这个函数,最后从而得到一个值。此时就需要map了。 ilter()
把传入的函数依次作用于每个元素,然后根据返回值是true
还是false
决定保留还是丢弃该元素。可见用filter()
这个高阶函数,关键在于正确实现一个“筛选”函数
var a = [1,2,3,4,5]
var b =[]
var fun = function(x,y)
{
return x+y;
}
b = a.reduce(fun)
alert(b) // 15
3.高阶函数之filter:
此时我们有一个数组,这个数组里面有我们想要的也有我们不想要的,怎么办,我们可以下一个函数,让这些值在这个函数里面走一遍,想要的留下,不想要的去掉,返回一个只有理想数值的数组。此时需要filter
var a = [1,2,3,4,5]
var b =[]
var fun = function(x)
{
return x%2 !== 0;
}
b = a.filter(fun)
alert(b)
4.高阶函数之sort:
这个就是之前数组里面提到的排序函数,这个也是一个高级函数,默认是从低到高。 通常规定,对于两个元素x
和y
,如果认为x < y
,则返回-1
,如果认为x == y
,则返回0
,如果认为x > y
,则返回1
,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。我们可以传入一个函数,让sort从高到低排序
var a = [3,2,5,1,4]
var fun = function(x,y)
{
if(x<y)
return 1
if(x==y)
return 0
if(x>y)
return -1
//如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1
}
a.sort(fun)
alert(a) //5,4,3,2,1
Array
的sort()
方法默认把所有元素先转换为String再排序 2 10排序会认为2比10大...
所以可以传入一个函数修改一下
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
sort()
方法会直接对Array
进行修改,它返回的结果仍是当前Array