Фильтры поиска Авито живут в адресе страницы, чтобы ссылкой можно было поделиться: ?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) // → объект
Источник: на задачах Авито: поиск и фильтры в адресе. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.