Преобразовать строку в массив, используя JavaScript - PullRequest
1 голос
/ 01 августа 2011

У меня есть такая строка:

string = "locations[0][street]=street&locations[0][street_no]=
         34&locations[1][street]=AnotherStreet&locations[1][street_no]=43";

Что мне делать с этой строкой, чтобы я мог играть с locations[][], как мне хочется?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вы можете написать парсер:

var myStr = "locations[0][street]=street&locations[0][street_no]=34&locations[1][street]=AnotherStreet&locations[1][street_no]=43";


function parseArray(str) {
    var arr = new Array();
    var tmp = myStr.split('&');
    var lastIdx;
    for (var i = 0; i < tmp.length; i++) {
        var parts = tmp[i].split('=');
        var m = parts[0].match(/\[[\w]+\]/g);
        var idx = m[0].substring(1, m[0].length - 1);
        var key = m[1].substring(1, m[1].length - 1);
        if (lastIdx != idx) {
            lastIdx = idx;
            arr.push({});
        }
        arr[idx * 1][key] = parts[1];
    }
    return arr;
}

var myArr = parseArray(myStr);
0 голосов
/ 01 августа 2011

Как сказал Shadow wizard, использование split и eval, похоже, является решением.Вам нужно сначала инициализировать местоположения, если вы хотите избежать ошибки.

stringArray=string.split("&");
for (var i=0;i<stringArray.length;i++){
    eval(stringArray[i]);
}

Однако вам может потребоваться обратить внимание на то, что такое street и street_no.Таким образом, это приведет к ошибке, потому что улица не определена.

Редактировать: и вам нужно будет полностью инициализировать местоположения с таким количеством элементов, сколько вам нужно, чтобы избежать ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...