分割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
                }
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_45099813/article/details/121130812