最近刷到了这道题,由于时间不够(能力不够)没做出来,现在重新做了一下
function splitUrl(url){
const params = {}
let temp = url.split("?")
if(temp.length<2){
return {}
}
let urls = temp[1].split('&')
urls.forEach(item=>{
// 处理一下 https://juejin.cn?abc 的情况
if(!item.includes('=')){
return params
}
// 将key与value分隔开
let temp = item.split('=')
let key,value
if(temp.length<2){
key = temp[0]
value = ''
}else {
key = temp[0]
value = temp[1]
}
// 判断是否是数字
if(checkNum(parseFloat(value),value)){
value = parseFloat(value)
}else if(['true','false','undefined','null'].includes(value)){
// 判断是否是boolean,undefined,null等
if('true'===value){
value = true
}
else if('false'===value){
value = false
}
else if('undefined'===value){
value = undefined
}
else if('null'===value){
value = null
}
}
// 判断是否是数组
if(key in params){
if(params[key].push){
params[key] = [...params[key],value]
}else{
params[key] = [params[key],value]
}
}else{
params[key] = value
}
})
return params
}
function checkNum(num,str){
let newNum = num
let newStr = str
// 判断一下isNaN的情况
if(isNaN(num)){
return false
}
// 判断一下负数的情况
if(newStr.startsWith('-')&&newStr.split('-').length==2){
newStr = newStr.replace('-','')
newNum = -newNum
}
// 判断一下小数的情况
if(newStr.includes('.')){
let newStrArray = newStr.split('.')
if(newStrArray.length>2){
return false
}
// 分开判断小数点前和小数点后是否都是数字
if(!checkNum(parseInt(newStrArray[0]),newStrArray[0])||!checkNum(parseInt(newStrArray[1]),newStrArray[1])){
return false
}else{
return true
}
}
let count = 1
while(newNum>=10){
newNum/=10
count++
}
if(count===newStr.length){
return true
}else{
return false
}
}
let res = splitUrl("http://localhost:8000/#/pages/order/receipt/receiptRisk?id=YH-HS-2023022430767&grid=131175352&grid=-131175352&grid=-131175352.asd&grid=asda13das1175352&title=HS%E6%A1%83%E5%9F%8E%E5%B0%9A%E5%93%81%E6%9E%97%E6%BA%AA%E4%BA%8C%E6%9C%9FHWFSF-6%E8%AE%BE%E5%A4%87%E8%B6%85%E9%A2%91&topOrderId=YH-HS-2023022430767&topRiskType=OLIN&cableInOutBaseline=undefined&standardWaveOutput=undefined&topTaskType=risk&speciality=%E6%97%A0%E7%BA%BF%E7%BD%91&topOrderClearTime=null")
console.log(res);