45.获取url参数
题目链接
https://www.nowcoder.com/practice/a3ded747e3884a3c86d09d88d1652e10?tpId=2&&tqId=10852&rp=1&ru=/activity/oj&qru=/ta/front-end/question-ranking
题目描述
获取 url 中的参数
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
示例1
输入
http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出
[1, 2, 3]
题目分析
- 截取字符串,截取"?“之后”#"之前的字符串;
- 由于截取后的字符串由"&“相连,所以用”&"分割字符串;
- 此时判断是否指定参数名称;
- 若是指定参数名称,求该参数的值,把值放在一个数组res中;
- 若是值的个数为0,则输出"";
- 若是值的个数为1,则输出res[0];
- 不指定参数名称时,判断用"&"分割后的字符串是否为空,为空时,返回{};不为空时,返回全部的参数对象;
function getUrlParam(sUrl, sKey) {
//截取"?"之后"#"之前的字符串
var urlStr = sUrl.split('#')[0].split('?')[1];
//用"&"分割字符串
var urlArr = urlStr.split('&');
//指定参数名称
if(sKey){
//定义数组
var res = new Array();
for(var i=0;i<urlArr.length;i++){
var temp = urlArr[i].split('=');
if(temp[0] == sKey){
res.push(temp[1]);
}
}
//该参数的值的长度为1
if(res.length == 1){
return res[0];
}else if(res.length == 0){ //该参数的值的长度为0,返回空字符串
return "";
}else{
return res;
}
}
//不指定参数名称,返回全部的参数对象 或者"{}"
else{
if(urlStr == undefined || urlStr == "" ){
return {};
}
else{
var obj = {};
for(var i=0;i<urlArr.length;i++){
var temp = urlArr[i].split('=');
if(!(temp[0] in obj)){
obj[temp[0]] = [];
}
obj[temp[0]].push(temp[1]);
}
return obj;
}
}
}