Войти Регистрация
Фронтенд

32. pipe для расчёта кешбэка Альфа-Банка

Лёгкая

Кешбэк по карте Альфа-Банка считается цепочкой шагов: сложить покупки, взять 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) => результат
функции высшего порядкакомпозицияreduce

Источник: на задачах Альфа-Банка: расчёт кешбэка. Условие пересказано своими словами.