推荐答案
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
。