This solution is generated by ChatGPT, correctness is not guaranteed.
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 * 2
const increment = pipe([plus(1)]); // equivalent to (x) => x + 1
const multiplyAndAdd = pipe([times(2), plus(3)]); // equivalent to (x) => x * 2 + 3
const subtractAndDivide = pipe([subtract(3), divide(4)]); // equivalent to (x) => (x - 3) / 4
console.log(twice(3)); // output: 6
console.log(increment(3)); // output: 4
console.log(multiplyAndAdd(3)); // output: 9
console.log(subtractAndDivide(3)); // output: 0