函数组合

大约 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']

实现思路

函数组合逻辑:

  1. 接收多个函数作为参数
  2. 返回一个函数
  3. 调用返回的函数时,依次调用传入函数
function compose(...args) {
  // args:函数参数
  return function (value) {
    // arg:第一次为传入的参数(str),第二次为第一个函数的执行结果...
    return args.reduce((arg, func) => func(arg), value);
  };
}

从右往左执行可将 reduce 改为 reduceRight

总结

函数组合可以将多个负责单一功能的函数组合在一起,形成一个新的多功能函数