How to convert URL parameters to a JavaScript object?

前端 未结 30 1412
时光取名叫无心
时光取名叫无心 2020-11-22 13:57

I have a string like this:

abc=foo&def=%5Basf%5D&xyz=5

How can I convert it into a JavaScript object like this?

{
          


        
30条回答
  •  庸人自扰
    2020-11-22 14:40

    Here's one I use:

    var params = {};
    window.location.search.substring(1).split('&').forEach(function(pair) {
      pair = pair.split('=');
      if (pair[1] !== undefined) {
        var key = decodeURIComponent(pair[0]),
            val = decodeURIComponent(pair[1]),
            val = val ? val.replace(/\++/g,' ').trim() : '';
    
        if (key.length === 0) {
          return;
        }
        if (params[key] === undefined) {
          params[key] = val;
        }
        else {
          if ("function" !== typeof params[key].push) {
            params[key] = [params[key]];
          }
          params[key].push(val);
        }
      }
    });
    console.log(params);
    

    Basic usage, eg.
    ?a=aa&b=bb
    Object {a: "aa", b: "bb"}

    Duplicate params, eg.
    ?a=aa&b=bb&c=cc&c=potato
    Object {a: "aa", b: "bb", c: ["cc","potato"]}

    Missing keys, eg.
    ?a=aa&b=bb&=cc
    Object {a: "aa", b: "bb"}

    Missing values, eg.
    ?a=aa&b=bb&c
    Object {a: "aa", b: "bb"}

    The above JSON/regex solutions throw a syntax error on this wacky url:
    ?a=aa&b=bb&c=&=dd&e
    Object {a: "aa", b: "bb", c: ""}

提交回复
热议问题