Лента Wildberries на каждое событие scroll считает, какие карточки видны, и шлёт аналитику. Событие приходит 60 раз в секунду, а пересчёт занимает 8 мс — на слабом Android лента дёргается.
Напишите throttle(fn, ms). Первый вызов выполняется сразу. Вызовы внутри окна в ms миллисекунд не выполняются, но последний из них запоминается и выполняется в конце окна — с этого момента начинается новое окно.
Если в окне вызовов не было, следующий вызов снова выполняется сразу.
В работе: Обработчики scroll и resize, отправка позиции в аналитику, перетаскивание.
Пример 1: один вызов
Аргументы теста
100, [[0, 0]]
Ожидается
[[0, 0]]
Пример 2: серия в одном окне
Аргументы теста
100, [[0, 120], [30, 240], [60, 360]]
Ожидается
[[0, 120], [100, 360]]
Как проверяем
Объявите
throttle — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function throttle(fn, ms) // → функция
Источник: на задачах Wildberries: лента товаров. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.