分割URL中的查询字符串
分割URL中的查询字符串
要求:传入一个sUrl字符串,返回sKey的键值,如果有多个相同的sKey,则将他们的键值存入数组并返回,如果没有传sKey则返回一个对象,对象中存所有查询字符串
例如:getUrlParam(‘http://www.baidu.com?key=1&key=2&key=3&key=4&test1=4#name’,‘key’)
返回:[1,2,3,4],
getUrlParam(‘http://www.baidu.com?key=1&key=2&key=3&key=4&test1=4#name’)
返回:{key:[‘1’,‘2’,‘3’,‘4’],test1:[‘4’]}
function getUrlParam(sUrl, sKey) {
// 将url字符串用split方法分割成key=value&key=value的形式
let str = sUrl.split('?')[1].split('#')[0]
// 判断是否传了需要查询的指定参数sKey
if (sKey) {
// 传了sKey参数则返回指定参数的对应值
// 准备一个空数组用来存放每一对key=value,数组中的每个元素都是[key,value]的形式
let b = []
// 使用split方法把str字符串以&分隔开,遍历返回的数组中的每个元素,把每个元素都以=分隔开,然后存入b数组
str.split('&').forEach(item => {
const part = item.split('=')
b.push(part)
})
// 将b数组过滤出key值等于sKey的元素,item[0]就是值key=value中的key
let c = b.filter(item => item[0] === sKey)
if (c.length > 1) {
// 如果过滤后的数组长度大于1,则d为一个数组
// 遍历c数组将数组中每一项的第二个元素,也就是key=value的value值转化为数字存入到d数组中
let d = []
c.forEach(item => d.push(Number(item[1])))
// 返回的d数组就是要查询的参数的值的集合
return d
} else if(c.length===1){
// 如果过滤后的数组长度等于1,则就返回value值
let d
c.forEach(item => d = item[1])
return d
}else if(c.length===0){
// 数组长度为0则返回一个空字符串
return ''
}
}else{
// 如果没有传sKey参数则返回一个对象,对象中存所有key:value键值对
if(!str){
return {}
}else{
let obj={}
// 将str用split方法以&分隔开,遍历数组
str.split('&').forEach(item=>{
// 如果数组的每一项以=分隔开的第一项在obj对象中不存在,则第一项为对象的key,类型为一个数组
if(!(item.split('=')[0] in obj)){
obj[item.split('=')[0]]=[]
}
// 将第二项的值存入第一项key的数组中
obj[item.split('=')[0]].push(item.split('=')[1])
})
// 返回的对象就是所有查询字符串的集合
return obj
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通