Работа с URLSearchParams в JavaScript

Как вы уже знаете, при работе с формами и GET запросами в JavaScript возникают строки такого вида:

javascriptlet paramsString = 'a=1&b=2&c=3';

Иногда нужно программным образом изменить значение какого-либо параметра из этой строки. Писать код, который делает это, не очень удобно. Поэтому в JavaScript встроен специальный класс URLSearchParams для работы с такими строками.

Давайте создадим объект этого класса, передав параметром нашу строку с параметрами:

javascriptlet paramsString = 'a=1&b=2&c=3';
let searchParams = new URLSearchParams(paramsString);

Давайте посмотрим, какие методы есть у созданного объекта.

Получение значения параметра

С помощью метода get можно получить значение параметра:

javascriptlet res = searchParams.get('a');
console.log(res);

Попробуем получить значение несуществующего параметра:

javascriptlet res = searchParams.get('x');
console.log(res); // выведет null

Проверка наличия параметра

С помощью метода has можно проверить наличие параметра. Проверим существующий параметр:

javascriptlet res = searchParams.has('a');
console.log(res); // выведет true

Проверим несуществующий:

javascriptlet res = searchParams.has('x');
console.log(res); // выведет false

Преобразование в строку

С помощью метода toString можно преобразовать наш объект обратно в строку:

javascriptlet res = searchParams.toString();
console.log(res); // выведет 'a=1&b=2&c=3'

Изменение параметров

С помощью метода set можно изменить значение параметра:

javascriptsearchParams.set('b', 'x');

Проверим изменения:

javascriptlet res = searchParams.toString();
console.log(res); // выведет 'a=1&b=x&c=3'

Добавление параметров

С помощью метода set можно также добавить новый параметр:

javascriptsearchParams.set('d', '4');

Проверим изменения:

javascriptlet res = searchParams.toString();
console.log(res); // выведет 'a=1&b=2&c=3&d=4'

Добавление параметров

С помощью метода append можно также добавить новый параметр:

javascriptsearchParams.append('d', '4');

Проверим изменения:

javascriptlet res = searchParams.toString();
console.log(res); // выведет 'a=1&b=2&c=3&d=4'

Давайте попробуем добавить уже существующий параметр:

javascriptsearchParams.append('a', '4');

В этом случае наш метод просто добавит одноименный параметр в конец:

javascriptlet res = searchParams.toString();
console.log(res); // выведет 'a=1&b=2&c=3&a=4'

В этом проявляется разница между методами set и append. Первый изменит существующий параметр, а второй просто добавит его дубль в конец.

Удаление параметров

С помощью метода delete можно удалять параметры:

javascriptsearchParams.delete('b');

Проверим изменения:

javascriptlet res = searchParams.toString();
console.log(res); // выведет 'a=1&c=3'

Перебор параметров циклом

Параметры можно перебирать циклом:

javascriptfor (let p of searchParams) {
  console.log(p);
}

Несколько одинаковых параметров

Пусть в нашей строке несколько одинаковых параметров:

javascriptlet paramsString = 'a=1&a=2b=2&c=3';

С помощью метода getAll можно получить массив значений этих параметров:

javascriptlet res = searchParams.getAll('a');
console.dir(res); // выведет [1, 2]

Практические задачи

Пусть дана следующая строка с параметрами:

javascriptlet paramsString = 'test1=param1&test2=param2&test3=param3';
Задание 1

Добавьте в эту строку еще один параметр test3.

Задание 2

Удалите из этой строки параметр test2.

Задание 3

Измените параметр test1 на новое значение.