跳至主要內容

7. 解析 URL 参数

鸭梨小于 1 分钟

7. 解析 URL 参数

解析 URL 中的参数列表。

 */
export function parseParam(url) {
  const paramsStr = /.+\?(.+)$/.exec(url)[1] // 将 ? 后面的字符串取出来
  const paramsArr = paramsStr.split('&') // 将字符串以 & 分割后存到数组中
  const paramsObj = {}
  // 将 params 存到对象中
  paramsArr.forEach((param) => {
    if (/=/.test(param)) { // 处理有 value 的参数
      const [key, val_encoded] = param.split('=') // 分割 key 和 value
      const val_decoded = decodeURIComponent(val_encoded) // 解码
      const val = /^\d+$/.test(val_decoded) ? Number.parseFloat(val_decoded) : val_decoded // 判断是否转为数字
      if (paramsObj.hasOwnProperty(key)) { // 如果对象有 key,则添加一个值
        paramsObj[key].push(val)
      }
      else { // 如果对象没有这个 key,创建 key 并设置值
        paramsObj[key] = val
      }
    }
    else { // 处理没有 value 的参数
      paramsObj[param] = true
    }











 









修改了原文的代码,转换为更简单的移入操作,并全部使用 const 定义变量。

+ paramsObj[key].push(val);
- paramsObj[key] = [].concat(paramsObj[key], val);