高阶函数 - Part 1 of 函数式编程


  • administrators

    高阶函数(Higher-order functions) 指一种特定函数,你可以把其他函数当做变量传递个它。
    应用EJS上的例子:

    function repeat(n, action) {
      for (let i = 0; i < n; i++) {
        action(i);
      }
    }
    
    repeat(3, console.log);
    // → 0
    // → 1
    // → 2
    

    以上repeat就是一个高阶函数 - 它接受两个参数,第二个参数action是函数类型。

    在函数式编程里,你一定要知道下面这个几个Javascript自带的高阶函数:

    map

    map - 把数组成员一个个传给另外一个函数,这个函数把处理结果一个个返回,然后map把它们放到新的数组里返回。
    例子:

    function double (x) {
      return x*2;
    }
           
    const arr = [1,2,3];
    
    //map - return array
    const newArr1 = arr.map(double);
    console.log(newArr1);
    

    filter

    filter - 把数组成员一个个传给另外一个函数,这个函数返回boolean值,然后filter把返回true的成员放到新的数组里返回。

    function greaterThan2(x){
      return x>2;
    }
    
    const arr = [1,2,3];
    
    //filter - return array
    const newArr2 = arr.filter(greaterThan2);
    console.log(newArr2);
    

    reduce

    reduce - 把数组成员从左到右,传入另一个函数,接下来把得到结果和下一个成员再一起传入那个函数,最终返回一个值(不再是数组了

    function plus(x, y) {
      return x+y;
    }
         
    const arr = [1,2,3];
    
    //reduce - return value
    //注意:reduce把数组成员从左到右,传入另一个函数,接下来把得到结果和下一个成员再一起传入那个函数
    //[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
    //例如:f(f(1,2),3) = f(3,3) = 6
    const newArr3 = arr.reduce(plus);
    console.log(newArr3);
    

    欢迎到codepen 调测: https://codepen.io/adamcai/pen/vQbWzy?editors=0010

    最后,你很可能要用到这个函数编程的利器 - Lodash https://lodash.com/