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

9. Изменились ли фильтры поиска Авито

Средняя

Поиск Авито отправляет запрос, когда меняются фильтры: цена, категория, метки. Объект фильтров пересоздаётся при каждом клике, поэтому === всегда даёт false и запросы дублируются.

Напишите deepEqual(a, b) для примитивов, простых объектов и массивов. Порядок ключей в объектах не важен, порядок элементов в массивах важен. NaN равен NaN. Массив не равен объекту с теми же индексами. {a: undefined} не равен {b: undefined}. null не равен {}.

В работе: Пропуск лишних запросов, React.memo со своим сравнением, тесты.

Пример 1: одинаковые фильтры

Аргументы теста
{"tags": ["новое", "доставка"], "price": {"to": 5000, "from": 1000}}, {"tags": ["новое", "доставка"], "price": {"to": 5000, "from": 1000}}
Ожидается
true

Пример 2: другой порядок ключей

Аргументы теста
{"cat": "мебель", "city": "Казань"}, {"cat": "мебель", "city": "Казань"}
Ожидается
true
Как проверяем Объявите deepEqual — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 9: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function deepEqual(a, b) // → boolean
рекурсияобъектысравнение

Источник: на задачах Авито: фильтры поиска. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.