Кажется, что ваш код работает отлично, однако, он не будет работать должным образом с URL, с параметрами запроса, присвоенных более одного значения (например, http://example.com/page.php?param=foo¶m=bar
). Кроме того, если одно из имен параметров строки запроса равно length
или что-то, что может сделать плохие вещи в массиве params
- возможно, лучше попробовать другой контейнер.
var params = [], hash;
var q = 'example.com/index.html?param1=foo¶m2=data'.split('?')[1];
if(q != undefined){
q = q.split('&');
for(var i = 0; i < q.length; i++){
hash = q[i].split('=');
params.push(hash[1]);
params[hash[0]] = hash[1];
}
}
console.dir(params); // Array[2] 0: "foo" 1: "data" length: 2 param1: "foo" param2: "data" __proto__: Array[0]
Я хотел бы предложить, имея переменную params
быть объектом, и пропустить строку params.push(hash[1])
, потому что вы можете перебрать свойства, используя for..in
петлю достаточно легко, и порядок параметров не должен» так или иначе. Если для параметра определенного имени имеется более одного значения, тогда значение этого параметра будет массивом. Например, ?param=foo¶m=bar
в конечном итоге анализируется как { param: ["foo", "bar"] }
.
Что вы имеете в виду множественным? Каков пример URL-адреса, который не будет работать? – epascarello
@epascarello he означает example.com/index.html?param1=foo¶m2=data –
@LeoWilson понял это правильно. –