По тексту условия функции применяются слева направо: начальное значение проходит первую, затем вторую. Для этого подходит reduce; классический compose обычно идёт справа налево.
Композиция функций через каррирование с произвольным числом аргументов
По тексту условия функции применяются слева направо: начальное значение проходит первую, затем вторую. Для этого подходит reduce; классический compose обычно идёт справа налево.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию compose, которая с помощью каррирования принимает любое количество функций и возвращает новую функцию. При вызове этой возвращённой функции необходимо передать начальное число – оно будет подано в первую переданную функцию, её результат – во вторую и так далее, пока не будет выполнена последняя функция.
const a = (x) => x * 2;
const b = (x) => x * 2;
const c = (x) => x * 2;
// Ожидаемый результат: a(b(c(2))) // 16
// compose(a, b, c)(2);
Функция должна корректно работать с любым количеством функций (включая один) и возвращать результат последней функции в цепочке.
Ответ
По тексту условия функции применяются слева направо: начальное значение проходит первую, затем вторую. Для этого подходит reduce; классический compose обычно идёт справа налево.
const compose = (...functions) => value => functions.reduce((result, fn) => fn(result), value);
Для a, b, c из примера обе трактовки дают 16, потому что все функции одинаковы. Если требуется именно a(b(c(value))), замените reduce на reduceRight. Без функций возвращается исходное значение; версия рассчитана на синхронные унарные функции.