JavaScript高阶函数 map reduce filter sort

时间:2021-07-03 04:01:19
本文是笔者在看廖雪峰老师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:
            这个就是之前数组里面提到的排序函数,这个也是一个高级函数,默认是从低到高。 通常规定,对于两个元素xy,如果认为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
Arraysort()方法默认把所有元素先转换为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