如何创建执行多种合成的功能?

时间:2018-07-25 01:08:49

标签: javascript function-composition

我想结合两个或多个函数来产生一个新函数。

如何通过返回接受一个参数的函数来创建执行从左到右函数合成的函数?

例如:

const square = v => v * v;
const double = v => v * 2;
const addOne = v => v + 1;

const cal = myFunction(square, double, addOne);
cal(2) // 9; addOne(double(square(2)))

1 个答案:

答案 0 :(得分:6)

您可能已经myFunction将传递的函数转换为带有rest参数的数组,然后返回一个函数,该函数使用reduce在数组上进行迭代,并将传递的参数作为初始值传递:< / p>

const myFunction = (...fns) => arg => fns.reduce(
  (a, fn) => fn(a),
  arg
);

const square = v => v * v;
const double = v => v * 2;
const addOne = v => v + 1;

const cal = myFunction(square, double, addOne);
console.log(cal(2)) // 9; addOne(double(square(2)))