供参考
const obj = url
.substr(1)
.split('&')
.reduce((o, p) => {
let [k, v = ''] = p.split('=')
v = v === '' || (isNaN(v) ? v : Number(v))
o[k] = o[k]
? Array.isArray(o[k])
? [...o[k], v]
: [o[k], v]
: v
return o
}, {})
var url = '?user=cmz&age=21&age=23&city=北京&enable'
/**
*
* @param {string} string
*/
function parse(string) {
let query = string.replace(/^\?/, '')
return query.split('&').reduce((obj, next) => {
let parts = next.split('=')
let key = parts[0]
let value = parts[1]
if (obj.hasOwnProperty(key)) {
obj[key] = Array.isArray(obj[key]) ? [...obj[key], value] : [obj[key], value]
} else {
obj[key] = value ? value : true
}
return obj
}, {})
}
console.log(parse(url))
感觉写的更复杂。
权当抛砖引玉。
要在赋值的地方做个判断
// 先声明一个变量
var hash = {};
url.replace(//([^=?&]+)=([^=?&]+)//g,function(){
if(!hash[obj[arguments[1]]]){
obj[arguments[1]] = arguments[2];
hash[arguments[1]] = true;
}else{
// 这里做是否是第一个 条件判断看你自己的需求
if(Array.isArray(obj[arguments[1]])){
obj[arguments[1]].push(arguments[2]);
}else{
const firstVal = obj[arguments[1]];
obj[arguments[1]] = [firstVal,arguments[2]];
}
}
})
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
一切没有返回值的
replace
都是耍流氓希望对你有帮助。