各大互联网公司2014前端笔试面试题–JavaScript篇(求解)
伊谢尔伦
伊谢尔伦 2017-04-10 15:08:39
0
6
1104

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 }
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

reply all(6)
Ty80

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

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" );
迷茫

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

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}

最后返回。

左手右手慢动作
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');
大家讲道理

迷茫

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

黄舟
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 )
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template