Я хочу создать функцию, которая анализирует строку запроса URL-адреса (параметры и значения) из текущего URL-адреса (например, document.location) и сохраняет каждую пару значений ключа (параметр = значение) как отдельный элемент в массиве.
Так, например, если URL-адрес: http://example.com?product=shoes&price=59.99&color=red
Затем возвращается: параметры = ["продукт = обувь", "цена = 59,99", "цвет = красный"];
Какие-либо предложения?
Спасибо,
location.href.split('?')[1].split('&')Просто строки, но я хочу, чтобы у массива было имя, на которое можно ссылаться. Также я хочу, чтобы у функции было имя.
Если вы используете location.href, вы можете использовать вместо него location.search.slice(1).split('&').



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать методы .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.info(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.info(parser(str));Документы:
Спасибо, это здорово. Но как мне дать имя функции и массиву?
Это проблематично для URL с идентификатором фрагмента #.
@Evert Да, вы правы, но мой ответ относится к формату, упомянутому OP.
В зависимости от требований вашего браузера вы можете использовать объект 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.info(items);
Вам действительно нужны строки типа «name = value» в вашем массиве? Или вам нужны фактические значения объектов, на которые можно ссылаться?