>  Q&A  >  본문

各大互联网公司2014前端笔试面试题–JavaScript篇(求解)

22.有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。

答案:

javascript1 function serilizeUrl(url) {
2     var result = {};
3     url = url.split("?")[1];
4     var map = url.split("&");
5     for(var i = 0, len = map.length; i < len; i++) {
6         result[map[i].split("=")[0]] = map[i].split("=")[1];
7     }
8     return result;
9 }
伊谢尔伦伊谢尔伦2771일 전1099

모든 응답(6)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-10 15:10:39

    简单的分割完成之后,需要记得做解码处理,同时对于设置为空的也要做好判断。

    function getParas( url ) {
        /** 拿到 GET 参数的另一种方法 **/
        var anchor = document.createElement("a");
        anchor.href = url;
        var search = anchor.search.substring(1);
    
        return search.split("&").reduce(function(res, p){
            var r = p.split("=").map(function(o){ return decodeURIComponent(o) });
            res[r[0]] = r[1] || "";
            return res;
        }, {})
    }
    
    getParas( "http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e" );
    

    회신하다
    0
  • 迷茫

    迷茫2017-04-10 15:10:39

    先通过分割'?'找到参数名和参数值部分:

    url = url.split("?")[1];
    

    又通过:

    var map = url.split("&");
    

    将每个键值对分割开,形成数组,放入循环:

    for(var i = 0, len = map.length; i < len; i++) {
        result[map[i].split("=")[0]] = map[i].split("=")[1];
    }
    

    在循环中,将键值数组的第一位当键,第二位当值,存入对象中:

    Object {a: "1"}
    Object {a: "1", b: "2"}
    Object {a: "1", b: "2", c: ""}
    Object {a: "1", b: "2", c: "", d: "xxx"}
    Object {a: "1", b: "2", c: "", d: "xxx", e: undefined}
    

    最后返回。

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-10 15:10:39

    javascriptfunction serilizeUrl (url) {
        var reg = /(\w+)(?:=([^=&]*))?/g
            , result = {}
            , match;
    
        url = (url || '').split('?');
    
        if (!url || url.length <= 1) {
            return null;
        }
    
        while (match = reg.exec(url[1])) {
            result[match[1]] = match[2] === undefined ? undefined : decodeURIComponent(match[2] || '');
        }
    
        return result;
    }
    
    serilizeUrl('http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e');
    

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:10:39

    회신하다
    0
  • 迷茫

    迷茫2017-04-10 15:10:39

    结合楼上各位的思路,写了一份总结
    放在 github 上。
    如果有什么不正确的地方,欢迎 pull request :)

    회신하다
    0
  • 黄舟

    黄舟2017-04-10 15:10:39

    var search = window.location.search.substr(1);
        function test(str){
              var tmpArr=str.split('&');
               var reObj={};
              tmpArr.forEach(function(item,index){
                     var temp=item.split('='); 
                     reObj[temp[0]]=temp[1];
               })
              return reObj;
       }
    test(search )
    

    회신하다
    0
  • 취소회신하다