函数组合
大约 1 分钟
什么是函数组合
将多个函数组合成一个函数,类似过滤器的作用
compose(fun1,fun2,...)(value)
=> value | fun1 | fun2 | ...
为什么需要函数组合
🌰
处理字符串
function stringToUpper(str) {
return str.toUpperCase();
}
function stringToArray(str) {
return str.split("");
}
const str = "javascript";
const upperStr = stringToUpper(str); // 'JAVASCRIPT'
const arrayStr = stringToArray(upperStr); // ['J','A','V','A','S','C','R','I','P','T']
以上做法虽然方便使用,但会产生很多不必要的变量定义
如果有一个函数能将需要用到的函数组合起来,通过调用组合后的函数得到结果,那就会很方便,而且不需要定义很多不必要的变量
const func = compose(stringToUpper, stringToArray);
func(str); // ['J','A','V','A','S','C','R','I','P','T']
实现思路
函数组合逻辑:
- 接收多个函数作为参数
- 返回一个函数
- 调用返回的函数时,依次调用传入函数
function compose(...args) {
// args:函数参数
return function (value) {
// arg:第一次为传入的参数(str),第二次为第一个函数的执行结果...
return args.reduce((arg, func) => func(arg), value);
};
}
从右往左执行可将 reduce
改为 reduceRight
总结
函数组合可以将多个负责单一功能的函数组合在一起,形成一个新的多功能函数