Парсинг строки запроса URL в массив - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу создать функцию, которая анализирует строку запроса URL (параметры и значения) из текущего URL (например, document.location) и сохраняет каждую пару ключ-значение (параметр = значение) как отдельный элемент в массиве.

Так, например, если URL-адрес: http://example.com? Продукт = обувь и цена = 59,99 & цвет = красный

Тогда возвращается: параметры = ["продукт = обувь", "цена = 59,99", "цвет = красный"];

Есть предложения?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

В зависимости от требований вашего браузера вы можете использовать объект URLSearchParams:

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams

var params = new URLSearchParams(location.search);

Или, если вам нужно сделать это вручную, вы можете разделить строку location.search:

var qs = location.search.replace('?', '');  // get querystring and remove question marks
var pairs = qs.split('&');                  // split on ampersand
var items = {};                             // declare object to store key/value pairs

// Loop through pairs and extract the key and the value (and append them to the object)
for (var i = 0; i < pairs.length; i++) {
    items[pairs[i].split('=')[0]] = pairs[i].split('=')[1];
}

console.log(items);
0 голосов
/ 27 апреля 2018

Вы можете использовать .slice() и .split() методы String:

let str = 'http://example.com?product=shoes&price=59.99&color=red';

let parser = url => url.slice(url.indexOf('?') + 1).split('&');
               
console.log(parser(str));

Вы также можете создать объект с парами ключ / значение, используя .reduce():

let str = 'http://example.com?product=shoes&price=59.99&color=red';

let parser = url => url.slice(url.indexOf('?') + 1)
                       .split('&')
                       .reduce((a, c) => {
                         let [key, value] = c.split('=');
                         a[key] = value;
                         return a;
                       }, {});

console.log(parser(str));

Docs:

...