Кешбэк по карте Альфа-Банка считается цепочкой шагов: сложить покупки, взять 5 % в категории, округлить до рубля, ограничить 3000 ₽ в месяц, подписать для экрана. Шаги переставляют под акции, поэтому их собирают из маленьких функций.
Напишите pipe(...fns). Она возвращает функцию, которая вызывает fns слева направо: первая получает все аргументы вызова, каждая следующая — результат предыдущей. Возвращается результат последней.
pipe() без функций возвращает первый аргумент как есть. Собранную функцию вызывают много раз с разными суммами.
В работе: Цепочки преобразований данных, middleware, обработка полей формы перед отправкой.
Пример 1: 5 % и округление
["cashback5", "round", "cap3000"], [12340]
[617, 617]
Пример 2: потолок 3000 ₽
["cashback5", "cap3000", "toStr"], [100000]
["3000 ₽", "3000 ₽"]
pipe — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 8: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function pipe(...fns) // → (...args) => результат
Источник: на задачах Альфа-Банка: расчёт кешбэка. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.