Rumah > Soal Jawab > teks badan
22.有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。
答案:
javascript
1 function serilizeUrl(url) { 2 var result = {}; 3 url = url.split("?")[1]; 4 var map = url.split("&"); 5 for(var i = 0, len = map.length; i < len; i++) { 6 result[map[i].split("=")[0]] = map[i].split("=")[1]; 7 } 8 return result; 9 }
PHP中文网2017-04-10 15:10:39
简单的分割完成之后,需要记得做解码处理,同时对于设置为空的也要做好判断。
function getParas( url ) {
/** 拿到 GET 参数的另一种方法 **/
var anchor = document.createElement("a");
anchor.href = url;
var search = anchor.search.substring(1);
return search.split("&").reduce(function(res, p){
var r = p.split("=").map(function(o){ return decodeURIComponent(o) });
res[r[0]] = r[1] || "";
return res;
}, {})
}
getParas( "http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e" );
迷茫2017-04-10 15:10:39
先通过分割'?'找到参数名和参数值部分:
url = url.split("?")[1];
又通过:
var map = url.split("&");
将每个键值对分割开,形成数组,放入循环:
for(var i = 0, len = map.length; i < len; i++) {
result[map[i].split("=")[0]] = map[i].split("=")[1];
}
在循环中,将键值数组的第一位当键,第二位当值,存入对象中:
Object {a: "1"}
Object {a: "1", b: "2"}
Object {a: "1", b: "2", c: ""}
Object {a: "1", b: "2", c: "", d: "xxx"}
Object {a: "1", b: "2", c: "", d: "xxx", e: undefined}
最后返回。
ringa_lee2017-04-10 15:10:39
javascript
function serilizeUrl (url) { var reg = /(\w+)(?:=([^=&]*))?/g , result = {} , match; url = (url || '').split('?'); if (!url || url.length <= 1) { return null; } while (match = reg.exec(url[1])) { result[match[1]] = match[2] === undefined ? undefined : decodeURIComponent(match[2] || ''); } return result; } serilizeUrl('http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e');
黄舟2017-04-10 15:10:39
var search = window.location.search.substr(1);
function test(str){
var tmpArr=str.split('&');
var reObj={};
tmpArr.forEach(function(item,index){
var temp=item.split('=');
reObj[temp[0]]=temp[1];
})
return reObj;
}
test(search )