Композиция функций через каррирование с произвольным числом аргументов

По тексту условия функции применяются слева направо: начальное значение проходит первую, затем вторую. Для этого подходит 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. Без функций возвращается исходное значение; версия рассчитана на синхронные унарные функции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее