'http://www.xxx.com/?user=candidate&id=43&id=99&city=%E5%B9%BF%E5%B7%9E&enabled'
将上面url地址中传递的值解析为一个对象
{
user: 'candidate',
id: [ 43, 99 ],
city: '广州',
enabled: true
}
1.解析中文并且利用split取出url中的键值对
// 定义空对象
let obj = {}
str = decodeURI(url).split('?')[1].split('&')
//[ 'user=candidate', 'id=43', 'id=99', 'city=广州', 'enabled' ]
2.循环键值对数组,然后对键值对进行处理存入一个对象中
str.forEach(item=>{
// 等号分割出键和值
item = item.split('=')
let key = item[0]
let val = item[1]
// 如果转数字不为NaN,那么就转为number类型
if(!isNaN(Number(val))){
val = Number(val)
}
// 如果item 存在那么就合并成一个数组
if(obj[key]){
obj[key] = [obj[key]].concat(val)
}else{
// 如果只有键没有值那么值为true
if(!val) return obj[key] = true
obj[key] = val
}
})
完整代码
const url = 'http://www.xxx.com/?user=candidate&id=43&id=99&city=%E5%B9%BF%E5%B7%9E&enabled'
function parseUrl(str){
let obj = {}
str = decodeURI(url).split('?')[1].split('&')
str.forEach(item=>{
item = item.split('=')
let key = item[0]
let val = item[1]
if(!isNaN(Number(val))){
val = Number(val)
}
if(obj[key]){
obj[key] = [obj[key]].concat(val)
}else{
if(!val) return obj[key] = true
obj[key] = val
}
})
return obj
}
console.log(parseUrl(url));
// { user: 'candidate', id: [ 43, 99 ], city: '广州', enabled: true }