链接:
https://www.nowcoder.com/questionTerminal/a3ded747e3884a3c86d09d88d1652e10
来源:牛客网
获取 url 中的参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
来源:牛客网
function getUrlParam(sUrl, sKey) {
var param = sUrl.split('#')[0].split('?')[1];
if (sKey){//指定参数名称
var strs = param.split('&');
var arrs = new Array();//如果存在多个同名参数,则返回数组
for(var i = 0, len = strs.length; i < len; i++){
var tmp = strs[i].split('=');
if(tmp[0] == sKey){
arrs.push(tmp[1]);
}
}
if (arrs.length == 1){//返回该参数的值或者空字符串
return arrs[0];
} else if (arrs.length == 0){
return "";
} else {
return arrs;
}
} else {//不指定参数名称,返回全部的参数对象 或者 {}
if(param == undefined || param == ""){
return {};
} else {
var strs = param.split('&');
var arrObj = new Object();
for(var i = 0, len = strs.length; i < len; i++){
var tmp = strs[i].split('=');
if (!(tmp[0] in arrObj)) {
arrObj[tmp[0]] = [];
}
arrObj[tmp[0]].push(tmp[1]);
}
return arrObj;
}
}
}
获取 url 中的参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
输入例子:
getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')
输出例子:
[1, 2, 3]function getUrlParam(sUrl, sKey) { var param = sUrl.split('#')[0].split('?')[1]; if (sKey){//指定参数名称 var strs = param.split('&'); var arrs = new Array();//如果存在多个同名参数,则返回数组 for(var i = 0, len = strs.length; i < len; i++){ var tmp = strs[i].split('='); if(tmp[0] == sKey){ arrs.push(tmp[1]); } } if (arrs.length == 1){//返回该参数的值或者空字符串 return arrs[0]; } else if (arrs.length == 0){ return ""; } else { return arrs; } } else {//不指定参数名称,返回全部的参数对象 或者 {} if(param == undefined || param == ""){ return {}; } else { var strs = param.split('&'); var arrObj = new Object(); for(var i = 0, len = strs.length; i < len; i++){ var tmp = strs[i].split('='); if (!(tmp[0] in arrObj)) { arrObj[tmp[0]] = []; } arrObj[tmp[0]].push(tmp[1]); } return arrObj; } } }
function getUrlParam(sUrl,sKey){ var result = {}; sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){//a,模式的匹配项;k,第一个捕获组的匹配项;v,第二个捕获组的匹配项。 if(result[k] !== void 0){//通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式 var t = result[k]; result[k] = [].concat(t,v); }else{ result[k] = v; } }); if(sKey === void 0){ return result; }else{ return result[sKey] || ''; } }