1.描述
获取 url 中的参数
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
- 不支持URLSearchParams方法
示例:
输入:http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出:[1, 2, 3]
2.思路
将字符串切割,保存在对象中。根据题目要求,分为两种情况,指定参数名称、不指定参数名称,其中特殊情况为存在多个同名参数,返回数组。
3.代码
题解的的方法:未完全理解
function getUrlParam(sUrl, sKey) {
//http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
var paramArr = sUrl.split('?')[1].split('#')[0].split('&');
const obj = {};
paramArr.forEach(element => {
const [key, value] = element.split('=');
if (obj[key] === void 0) {
obj[key] = value
} else {
obj[key] = [].concat(obj[key], value);
}
});
return sKey === void 0 ? obj : obj[sKey] || ''
}
排行中的方法:
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;
}
}
}