高阶函数 - Part 1 of 函数式编程
-
高阶函数(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/