js解析 URL Params 为对象

    let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled';
function parseParam(url){
    ; // 将字符串以 & 分割后存到数组中
    let paramsArr = url.slice(url.indexOf('?')+1).split('&')
    // 将 params 存到对象中
    let paramsObj = {}; 

    paramsArr.forEach(item => {
        // 处理有 value 的参数
        if(item.indexOf('=')>-1){
            // 分割 key 和 value
            let [key,val] = item.split('=');
            val = decodeURIComponent(val) // 解码
            val = /^d+$/.test(val) ? parseFloat(val) : val; // 转化为数字

            if(paramsObj.hasOwnProperty(key)){ // 如果对象有 key,则添加一个值
                paramsObj[key] = [].concat(paramsObj[key],val)
            }else{
                // 如果对象没有这个 key,创建 key 并设置值
                paramsObj[key] = val;
            }
        }else{
            // 处理没有 value 的参数
            paramsObj[item] = true;
        }
    })
    return paramsObj;
}

console.log(parseParam(url)) // { user: 'anonymous', id: [ '123', '456' ], city: '北京', enabled: true }

   转载规则


《js解析 URL Params 为对象》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录