A continuación hay tres funciones que deben componerse y darnos la salida 30 :
const add = (a) => a + 10; const mul = (a) => a * 10; const divide = (a) => a / 5; // How to implement `compositionFunction`? compositionFunction(add, mul, divide)(5); //=> 30 La salida esperada es 30 porque:
5 + 10 = 15 15 * 10 = 150 150 / 5 = 30Algo como esto
const add = (a) => a + 10 ; const mul = (a) => a * 10 ; const divide = (a) => a / 5 ; // How to use this function ----- const customComposeFn = (...f) => v => f.reduce((res, f) => f(res), v) console.log(customComposeFn(add, mul, divide)(5));Hay dos tipos de composición de funciones:
pipecompose Aquí hay una implementación recursiva solo por diversión:
Esto supone que hay al menos dos funciones para componer
const compose = (...fn) => { const [[f, g], x] = [fn.slice(-2), fn.slice(0, -2)]; const h = a => f(g(a)); return x.length ? compose(...x, h) : h; } const pipe = (...fn) => { const [f, g, ...x] = fn; const h = a => g(f(a)); return x.length ? pipe(h, ...x) : h; }Intentemos:
const foo = x => x + 'foo'; const bar = x => x + 'bar'; const baz = x => x + 'baz'; pipe(foo, bar, baz)(''); //=> 'foobarbaz' compose(foo, bar, baz)(''); //=> 'bazbarfoo' const add = (a) => a + 10; const mul = (a) => a * 10; const divide = (a) => a / 5; const customComposeFn = (...fn) => { return function (arg) { if (fn.length > 0) { const output = fn[0](arg); return customComposeFn(...fn.splice(1))(output); } else { return arg; } }; }; const res = customComposeFn(add, mul, divide)(5); console.log(`res`, res);