compose
by Artem
JavaScript
'use strict';
const fn1 = n => n + 1;
const fn2 = n => n * 2;
const compose = (...fns) => {
return n => {
let r = n;
for (let i = 0; i < fns.length; i++) {
r = fns[i](r);
}
return r;
};
};
const compose2 = (...fns) => fns.reduceRight((prev, next) => n => next(prev(n)));
const composed = compose2(fn1, fn2, fn2, fn1);
const result = composed(3); // 7
console.log(result);