Поиск Авито отправляет запрос, когда меняются фильтры: цена, категория, метки. Объект фильтров пересоздаётся при каждом клике, поэтому === всегда даёт 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
Источник: на задачах Авито: фильтры поиска. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.