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

16. Разбор адреса поиска Авито

Средняя

Фильтры поиска Авито живут в адресе страницы, чтобы ссылкой можно было поделиться: ?q=диван&price_from=1000&tag=new&tag=delivery. Напишите parseQuery(search) без URLSearchParams и URL — на собеседовании их обычно просят не использовать.

Ведущий ? необязателен. Ключи и значения декодируются: %D0%B4 — UTF-8, + — пробел. Ключ, встретившийся несколько раз, даёт массив значений в порядке появления. Ключ без = получает пустую строку. Всё после первого = — значение. Пустые пары (&&) пропускаются. Значения — строки, числа не преобразуются.

В работе: Восстановление фильтров из адреса, UTM-метки, deep link в приложение.

Пример 1: кириллица в запросе

Аргументы теста
"?q=%D0%B4%D0%B8%D0%B2%D0%B0%D0%BD&price_from=1000"
Ожидается
{"q": "диван", "price_from": "1000"}

Пример 2: повторяющийся ключ

Аргументы теста
"cat=mebel&tag=new&tag=delivery&tag=sale"
Ожидается
{"cat": "mebel", "tag": ["new", "delivery", "sale"]}
Как проверяем Объявите parseQuery — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function parseQuery(search) // → объект
строкиURLкодирование

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

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