JavaScript编程精解——高阶函数

本文详细介绍了JavaScript中的高阶函数,包括reduce、filter、map、sort和reverse等函数的使用方法及实例,帮助读者深入理解这些函数的工作原理。

高阶函数其实就是一个函数,将另一个函数作为参数或者(函数)返回值,简单说,就是一个函数操作了另一个函数;

    function a(n){        
        return function b(m){return m>n}     
    }     
    var funA = a(10);     
    console.log(funA(8));     
    //false 

你没看错这是一个闭包,也是一个高阶函数,在函数a中将函数b作为返回值; 下面我们来看一下JavaScript固有的高阶函数:

  • reduce reduce的调用方法:array.reduce(fun); //array是一个数组;fun是一个函数,仅接收两个参数; reduce函数的作用:按我的理解,reduce函数对数组中的每个元素根据一定条件(fun函数约定的条件)进行操作,最后返回一个值,fun函数接收两个参数,fun(a,b),是array的第一个和第二个元素,根据条件进行运算,返回的结果一次对array的第三个,直到最后一个元素进行运算,并返回最后结果。
    [1,2,5,6,7,8,9].reduce(function(a,b){
        return a+b;
    });
    //38 (返回数组之和)
     [1,2,5,6,7,8,9].reduce(function(a,b){
        if(a>b){
            return a;
        }else{
            return b;
        }
    });
    //9   (返回最大值)

通过这两个例子,可以看出reduce是对数组的一个累计计算的操作;可以举个例子: var list= [1,2,5,6,7,8,9]; 对数组求和: 首先我们可以设定一个变量,让他依次和数组中的每个元素累加,最后得出这个变量的值就是数组的和,ok,show me the code: function sum(list,result){ for(var i=0;i<list.length;i++){ result +=list[i]; } return result; } console.log(sum(list,0)); //38

  • filter filter函数的作用,简单来说是过滤数组,返回一个满足条件的数组:筛选出数组中符合条件的元素,组成一个新数组,并返回; array.filter(fun); [1,2,5,6,7,8,9].filter(function(a){ return a>6; });
  • map array.map(fun); map与filter类似,数组经过一定的条件(fun函数),对数组中每个对应的元素进行操作后,返回新的数组; 与filter的区别:map返回的是数组元素与原数组的元素不相同(值和类型都可能不同);map返回的数组的元素个数与原数组相等; 来个例子吧:
[1,2,5,6,7,8,9].map(function(a){
    return a+6;
});
// [7, 8, 11, 12, 13, 14, 15]  (返回的新数组)

多说一句,经过试验,map函数接收三个参数,array.map(fun(item,i,curList){ //item 为当前数据; //i 为索引值(0开头); //curList 为数组,即array; })

[1,2,5,6,7,8,9].map(function(item,i,curList){
       console.log(item,i,curList);
});
  • sort sort是对函数进行重新排序; array.sort(fun); fun接收两个参数,fun是排序遵循的条件;来个例子吧:
[7, 64, 131, 1, 3, 14, 5].sort(function(a,b){
    return a-b;   //按升序排列数组
    //return b-a;   //按降序排列数组
})
//[1, 3, 5, 7, 14, 64, 131]   (执行结果)
// [131, 64, 14, 7, 5, 3, 1]  (按降序排列执行的结果)
  • reverse 对当前数组进行倒序排列,返回新数组; [1, 3, 5, 7, 14, 64, 131] 数组的降序也可以写成:[1, 3, 5, 7, 14, 64, 131] .reverse()
[1, 3, 5, 7, 14, 64, 131] .reverse();
//[131, 64, 14, 7, 5, 3, 1] 

差不多就这么多吧,有什么不到的地方还请大家多指教,?

转载于:https://my.oschina.net/u/3698868/blog/1571167

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值