Элегантный способ преобразования строки массива массивов в массив массивов 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.