前言
一、题目描述?
描述
获取 url 中的参数
- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
- 不支持URLSearchParams方法
示例1
输入:
http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出:
[1, 2, 3]
二、解题
1.解法1
代码如下:
export const getUrlParam = (sUrl, sKey) => {
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] || '' // 如果该方法为一个参数,则返回对象。
//如果为两个参数,sKey存在,则返回值或数组,否则返回空字符。
}
2.解法2
代码如下:
function getUrlParam(sUrl, sKey) {
var result, sParam = {};
sUrl.replace(/(\?|&)(\w+)=(\w+)/g, function(k0, k3, k1, k2){
// console.log(k0, k1, k2, k3);
// 函数中k0,k1,k2, k3分别代表原字符串,(?|&),(\w+),(\w+)
sParam[k1] === void 0 ? sParam[k1] = k2 : sParam[k1] = [].concat(sParam[k1], k2);
});
console.log(sUrl);
sKey === void 0 || sKey === '' ? result = sParam : result = sParam[sKey] || '';
return result;
}