首页 > 试题广场 >

参数解析器

[编程题]参数解析器
  • 热度指数:13532 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请补全JavaScript代码,要求将字符串参数URL中的参数解析并以对象的形式返回。
示例1

输入

getParams('https://nowcoder.com/online?id=1&salas=1000')

输出

{id:1, salas: 100}
可以直接用正则匹配,然后将匹配到的参数分别添加到对象中
let obj = {};
                if(url.indexOf('?') == -1) return obj;
                url.replace(/([^?&=]+)=([^?&=#]*)/g, (val, $1, $2) => {
                    var key = decodeURIComponent($1);
                    var value = decodeURIComponent($2);
                    obj[key] = value;
                    return val;
                })
                return obj;

发表于 2022-01-17 15:05:00 回复(0)
const _getParams = (url) => {
    // 补全代码
    let obj = {}
    url.replace(/([\w-_\u4e00-\u9fa5]+)=([\w-_\u4e00-\u9fa5]+)/g, function(a, b, c) {
        obj[b] = c;
    })
    return obj;
}

发表于 2022-04-05 21:07:31 回复(0)
const _getParams = (url) => {
    // 补全代码
    let arr = url.split('?');
    let res = arr[1].split('&');
    let obj = {};
    res.map(item=>{
        let arr = item.split('=')
        obj[arr[0]] = arr[1];
    })
    return obj;
}

发表于 2023-04-19 14:31:34 回复(0)
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>

<script>
  const _getParams = (url) => {
      // 补全代码
     let arr = url.split('?')[1]
     let arr1 = arr.split('&')
     let obj = {}
     arr1.forEach(item => {
         let [key,value] = item.split('=')
         obj[key] = value
     })
     return obj
     
  }
let url_ =  _getParams('http://www.baidu.com?name=xiaoming&age=18')
console.log(url_)
</script>
    </body>
</html>
发表于 2023-09-06 15:03:30 回复(0)
发表于 2022-08-25 10:43:51 回复(0)

Object.fromEntries()不被支持,只能自己来

const _getParams = (url) => {
                // 补全代码
                let obj = {}

                url
                    .slice(url.indexOf('?')+1)
                    .split('&')
                    .map(item=>item.split('='))
                    .forEach(item=>{
                        obj[item[0]] = item[1]
                    })

                return obj
            }
发表于 2023-08-25 14:27:02 回复(0)
const _getParams = (url) => {
    // 补全代码
    const querys = {}
    const params = url.indexOf('?') !== -1 ? url.split('?')[1].split('&') : []
    params.forEach(item => {
        const [key, val] = item.split('=')
        querys[key] = decodeURIComponent(val)
    })

    return querys
}

发表于 2022-06-28 14:24:26 回复(0)
<script>
            const _getParams = (url) => {
                // 补全代码
                var Params = new Object()
                //  找到 url 中 ‘?’ 的索引
                var index = url.indexOf('?')
                console.log(index)  //  提取 ‘?’ 之后的参数
                var strs = url.slice(index+1)
                // 把各个 参数 分离,变成数组
                var str = strs.split('&')
                //  循环 分离 每个参数 的 键值
                for(let i = 0; i < str.length; i++) { 
                    // Params[str[i].split("=")[0]]=unescape(str[i].split("=")[1]); 
                    Params[str[i].split("=")[0]]=str[i].split("=")[1];
            } 
           return   Params
            }
        </script>

发表于 2022-06-26 17:20:18 回复(0)
        <script>
            const _getParams = (url) => {
                // 补全代码
                let obj = {}
                // 1.先截取问号后面的片段,再以&分隔
                let urlArr = url.split('?')[1].split('&');
                // 遍历urlArr
                urlArr.forEach(item => {
                    // 再按=分隔
                    let itemArr = item.split('=');
                    obj[itemArr[0]] = itemArr[1];
                })
                return obj;
            }
        </script>

发表于 2022-03-20 22:17:17 回复(0)
const _getParams = (url) => {
    // 补全代码
    let res = {};

    let reg = /(\w+)=(\w+)/ig;
    let matchArr = url.match(reg);
    if(matchArr){
        for(value of matchArr){
            let params= value.split('=');
            res[params[0]] = params[1];
        }
    }
    return res;
}

发表于 2021-12-21 11:18:00 回复(0)
离谱了,浏览器测试通过,就这通不过
const _getParams = (url) => {
    // 补全代码
    const normilized = new URL(url)
    const entries = normilized.searchParams.entries()
    const result = {}
    for(const [key, val] of entries) {
        result[key] = val
    }
    return result
}

要是不能用URL, 你倒是题目里边说明啊
编辑于 2024-04-13 09:22:25 回复(0)
里面内容这样写的,提交不过,但我测试了他提出来的用例,结果是true,是通过的。
const splitArray = url.split("?")[1].replaceAll('=', ':').split("&");
      let obj={};
      splitArray.forEach(item => {
        obj[item.split(":")[0]] = item.split(":")[1]
      });
      return obj

编辑于 2024-04-10 15:32:10 回复(0)
               let tempArr=url.split('?')
                let arr=tempArr[1].split('&')
                let obj={}
                arr.map(item=>{
                    const [key,val]=item.split('=')
                    obj[key]=val
                })
                return obj
编辑于 2024-03-29 22:06:33 回复(0)
const _getParams = (url) => {
    // 补全代码
    //slice包含start不包含end,所以要url.lastIndexOf('?') + 1
    let params = url.slice(url.lastIndexOf('?') + 1).split('&');
    return params.reduce((pre, cur) => {
        let arr = cur.split("=");
        pre[arr[0]] = arr[1];
        return pre;
    }, {})
}

编辑于 2024-03-26 03:38:34 回复(0)

URLSearchParams

发表于 2023-12-26 17:03:05 回复(0)
            const _getParams = (url) => {
                // 补全代码
                let msg = url.split('?')[1].split('&');
                let obj = {};
                let idmsg = msg[0].split('=');
                let salasmsg = msg[1].split('=');
                obj[idmsg[0]] = idmsg[1];
                obj[salasmsg[0]] = salasmsg[1];
                return obj
                            }
发表于 2023-10-10 19:56:28 回复(0)
                const index = url.lastIndexOf('?')
                const text = url.substring(index + 1)
                const params = text.split('&')
                return params.reduce((accumulator, currentValue) => {
                    const array = currentValue.split("=")
                    accumulator[array[0]] = array[1]
                    return accumulator
                }, {})
发表于 2023-10-10 10:26:51 回复(0)
 const _getParams = (url) => {
      // 补全代码
      let arr = url.split('?')[1].split('&')
      let obj = {}
      arr.forEach(item => {
        let si = item.split('=')
        obj[si[0]] = si[1]
      })
      return obj
    }

发表于 2023-09-02 16:16:26 回复(0)
const _getParams = (url) => {
    // 补全代码
    const paramsStr = url.split("?")[1];
    const paramsArr = paramsStr.split("&");
    const params = [];
    paramsArr.forEach((v) => {
        params.push(v.split("="));
    });
    const entries = new Map(params);
    return Object.fromEntries(entries);
}
这个哪里有错误,浏览器运行正常,这里提交就过不了。

发表于 2023-08-01 15:05:47 回复(0)
const _getParams = (url) => {
    const arr = url.split('?')[1].split('&').map(v => {
        const [key, value] = v.split('=');
        return [key, decodeURIComponent(value)];
    });
    return Object.fromEntries(arr);
}
这样应该也可以的,但是测试没通过,在 Chrome 浏览器控制台测试正常

发表于 2023-07-25 00:22:41 回复(0)

问题信息

难度:
80条回答 596浏览

热门推荐

通过挑战的用户

查看代码