推荐答案
const pipe = (...fns) => (value) => fns.reduce((acc, fn) => fn(acc), value);
本题详细解读
题目要求
实现一个 pipe(...fns) 函数,该函数接受一系列函数作为参数,并返回一个新的函数。这个新函数会将传入的值依次通过每个函数进行处理,最终返回处理后的结果。
代码解析
函数定义:
pipe函数接受任意数量的函数作为参数,使用...fns将这些函数收集到一个数组中。- 返回一个新的函数,这个新函数接受一个初始值
value。
函数执行:
- 使用
reduce方法遍历fns数组中的每个函数。 reduce的初始值是传入的value,每次迭代将当前累积值acc传递给下一个函数fn,并将fn(acc)的结果作为下一次迭代的累积值。- 最终返回经过所有函数处理后的结果。
- 使用
示例
const add = (x) => x + 1; const multiply = (x) => x * 2; const subtract = (x) => x - 3; const result = pipe(add, multiply, subtract)(5); console.log(result); // 输出: 9
解释
- 初始值
5传递给add函数,结果为6。 6传递给multiply函数,结果为12。12传递给subtract函数,结果为9。- 最终结果为
9。