🟨 JavaScript
Средняя
🕐 15 мин

Парсинг URL-параметров

Цель: создать функцию getUrlParams(url), которая принимает URL-строку и возвращает объект, содержащий все её GET-параметры в виде пар «ключ-значение».

💡 Подсказка
  1. В браузере есть встроенные объекты для работы с URL.
  2. Помните про декодирование специальных символов (например, %20 должен стать пробелом).
👀 Решение №1 (современное, через URLSearchParams)
function getUrlParams(url) {
  // Создаём экземпляр URL, чтобы легко получить доступ к searchParams
  const searchParams = new URL(url).searchParams;
  // Конвертируем итератор URLSearchParams в объект
  return Object.fromEntries(searchParams.entries());
}

Почему так:

  • Надёжно: Использует встроенный в браузер API, который корректно обрабатывает большинство пограничных случаев (например, кодирование символов).
  • Читаемо: Код короткий и ясно выражает намерение.
  • Современно: Это стандартный способ работы с URL в современном JavaScript.
👀 Решение №2 (ручной парсинг)
function getUrlParams(url) {
  const params = {};
  const urlParts = url.split('?');
  
  if (urlParts.length > 1) {
    const queryString = urlParts[1];
    const pairs = queryString.split('&');
    
    for (const pair of pairs) {
      // Обрабатываем случай, когда есть ключ, но нет значения (например, ?a&b=2)
      const [key, value] = pair.split('=');
      if (key) {
        // decodeURIComponent для раскодирования, например, %20 в пробел
        params[decodeURIComponent(key)] = decodeURIComponent(value || '');
      }
    }
  }
  
  return params;
}

Почему так:

  • Познавательно: Помогает понять, как устроены URL-строки «под капотом».
  • Гибко: Даёт полный контроль над процессом, если нужна нестандартная логика.
  • Без зависимостей: Не требует специальных API, работает на чистом JavaScript.

Описание задачи

Напишите функцию getUrlParams, которая принимает на вход строку URL и возвращает объект, где ключами являются имена GET-параметров, а значениями — их значения.

Примеры

getUrlParams('https://example.com?a=1&b=hello'); // { a: '1', b: 'hello' }
getUrlParams('https://example.com?search=what%20is%20this'); // { search: 'what is this' }
getUrlParams('https://example.com'); // {}

Требования

  • Функция должна называться getUrlParams.
  • Если параметров нет, функция должна возвращать пустой объект.
  • Значения параметров должны быть декодированы (например, %20 должно стать пробелом).

🧑‍💻 Это не баг! Это фича!

Редактор кода намеренно скрыт на мобильном.

Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.

📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.

💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!