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);