解析query
例如:?a=1&a=2&b=hello&c=&d=true
处理成对象 {a: [1, 2], b: ‘hello’, d: true};
将重复的属性处理成数组,更深一点要处理数字类型和布尔类型
function queryHandler (url) {
const index = url.indexOf('?');
if (index > -1) {
const str = url.substr(index + 1);
let arr = str.split('&');
let obj = {};
for (let i in arr) {
let item = arr[i].split('=');
let key = item[0];
let value = item[1];
if (value) { // 如果value有值
// 处理value的值,number、boolean、string类型
value = !isNaN(Number(value)) ? Number(value) : (value === 'true' || value === 'false') ? value === 'true' : value;
if (obj[key] === undefined) { // 如果obj中没有这个key
obj[key] = value;
} else {
if (Array.isArray(obj[key])) { // 判断已有key的value是否为数组
obj[key].push(value);
} else {
obj[key] = [obj[key], value];
}
}
}
}
return obj;
}
}