【问题标题】:How to convert array parameters from url into an object in javascript?如何将数组参数从url转换为javascript中的对象?
【发布时间】:2015-11-18 02:11:27
【问题描述】:

解码后的GET参数:

var query = decodeURIComponent(document.location.search)

我明白了:

a[0]=data&a[1][one]=data&a[1][two]=data&b=data

我需要把它转换成这样的对象:

myObject = {
    a : {
          0 : data,
          1 : {
              one : data,
              two: data
          }
    },
    b : data
}

我不知道该怎么做。我是空白的。

编辑。 这个问题与可能的重复问题完全不同。这里我有一个多维数组。我可以很容易地将其拆分为:

myObject = {
   "a[0]" : data,
   "a[1][one]" : data,
   //etc
}

但我不需要那个。

【问题讨论】:

标签: javascript arrays url get


【解决方案1】:

我想出了一个临时解决方案,肯定是一个糟糕且不合适的解决方案。直到我有一个更好的,我会用这个。我认为它可能对某人有用。

接下来,我分享一个直到二维数组的版本。但它可以适应更深层次的:

function getParams() {
    var query = decodeURIComponent(document.location.search.substring(1));
    var params = {},
        tokens,
        r = /[?&]?([^=]+)=([^&]*)/g;

    var key, value, match = [],
        re = /\[([^\]]*)\]/g;

    while (tokens = r.exec(query)) {
        value = tokens[2];
        key = tokens[1].split('[');
        key = key[0];
        match = [];
        while ( (  res = re.exec(tokens[1]) ) != null ){
           match.push(res[1])
        }

        if (match) {
            switch (match.length) {
                case 1 :
                    params[key] = params[key] || {};
                    params[key][match[0]] = value;
                    break;
                case 2 :
                    params[key] = params[key] || {};
                    params[key][match[0]] = params[key][match[0]] || {};
                    params[key][match[0]][match[1]] = value;
                    break;
            }
        } else {
            params[key] = value;
        }
    }

    return params;
}

【讨论】:

    猜你喜欢
    • 2014-05-05
    • 2010-10-31
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多