1. 定义
什么是函数管道,就是将多个单参函数组合起来形成一个新的函数,在函数管道中,前一个函数的输出,是后一个函数的输入。
2. 例子
现在有一个需求,需要去除字符串所有空白字符,并将每个单词首字母大写。现在有小伙伴有疑问了,为什么不可以重新编写一个函数,专门用来做这件事叻,要把功能拆出来,再拼起来,这是为了复用,如果有需求,只是需要首字母大写呢。
// 将字符串中每一个单词首字母大写 const everyFirstLetterUp = (str) => { return str.toLowerCase().replace(/( |^|,)[a-z]/g, (L) => L.toUpperCase()); }; // 去除字符串中所有空白字符 const removeEmpty = (str) => { return str.replace(/\s+/g, ""); };
当我们不使用函数管道实现功能时,这就有几个问题,我们必须按顺序,反复调用这些函数,难以维护,容易出错。如下:
let str = " yqcoder is good"; str = everyFirstLetterUp(str); str = removeEmpty(str); console.log(str); // 'YqcoderIsGood'
当我们使用函数管道实现时,好处是我们把函数执行的顺序定下来了,并且便于我们维护,并且我们没有重新去写一个函数,只是利用之前的函数来组合成为了一个新的函数。如下:
let str = " yqcoder is good"; // 管道函数 const pipe = function () { let args = Array.from(arguments); return function (val) { return args.reduce((result, func) => { return func(result); }, val); }; }; // 组合函数 const smallCamel = pipe(everyFirstLetterUp, removeEmpty); smallCamel(str); // 'YqcoderIsGood'