This solution is generated by ChatGPT, correctness is not guaranteed. You might also be able to find a solution fromcommunity posts.
AI solution for JavaScript Coding Question on BFE.dev
11. what is Composition? create a pipe()
Here's one possible implementation of pipe()
:
const pipe = (fns) => (x) => fns.reduce((acc, fn) => fn(acc), x);
Explanation:
pipe
takes an array of functionsfns
as its argument, and returns a new function that applies each function infns
to the output of the previous function.- The new function takes one argument
x
, which is passed as the input to the first function infns
. reduce
is used to invoke each function infns
in turn. The accumulatoracc
starts out asx
, and is replaced by the return value of each function as it is invoked.- Finally, the output of the last function is returned as the output of the new function.
Example usage:
const times = (y) => (x) => x * y;const plus = (y) => (x) => x + y;const subtract = (y) => (x) => x - y;const divide = (y) => (x) => x / y;const twice = pipe([times(2)]); // equivalent to (x) => x * 2const increment = pipe([plus(1)]); // equivalent to (x) => x + 1const multiplyAndAdd = pipe([times(2), plus(3)]); // equivalent to (x) => x * 2 + 3const subtractAndDivide = pipe([subtract(3), divide(4)]); // equivalent to (x) => (x - 3) / 4console.log(twice(3)); // output: 6console.log(increment(3)); // output: 4console.log(multiplyAndAdd(3)); // output: 9console.log(subtractAndDivide(3)); // output: 0