Элегантный способ преобразования строки массива массивов в массив массивов Javascript?

У меня есть запрос ajax, который возвращает список значений, подобных этому:

"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"

Мне нужно, чтобы это был массив javascript с числами:

[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]

Я попытался заменить '[' и ']' на '|' а затем разделить на '|' и foreach item split by ',' и добавьте их в массив, но это вообще не.

Есть ли у вас какие-либо предложения?

Ответ 1

Вы можете использовать JSON.parse() для преобразования этой строки в массив, если сначала сначала скопировать ее в некоторые скобки вручную:

var value = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var json = JSON.parse("[" + value + "]");

console.log(json);

Я хотел бы предложить исправление вывода на сервере, если это возможно.

Ответ 2

Это решение глупо на практике - абсолютно использовать JSON.parse, как говорили другие, но в интересах весело провести время с регулярными выражениями, вы здесь:

function getMatches(regexp, string) {
  var match, matches = [];
  while ((match = regexp.exec(string)) !== null)
    matches.push(match[0]);
  return matches;
}

function parseIntArrays(string) {
  return getMatches(/\[[^\]]+\]/g, string)
    .map(function (string) {
      return getMatches(/\-?\d+/g, string)
        .map(function (string) { 
          return parseInt(string); 
        });
    });
}

parseIntArrays("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]");

Ответ 3

В функции

var strToArr = function(string){ return JSON.parse('[' + string + ']')}

console.log(strToArr("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"));

Ответ 4

var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var arr = [];
var tmp = string.split('], ');

for (var i=0; i<tmp.length; i++) {
    arr.push(tmp[i].replace(/\[|\]/g, '').split(', '));
}

Набрав на iPad, я заранее извиняюсь за любые опечатки.

Ответ 5

Если вы создаете данные и доверяете им, просто используйте eval:

var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"

var arrays = eval('[' + string + ']');

В качестве альтернативы, начните возвращать правильно сформированный JSON.