Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   преобразование сложной строки в массив (https://javascript.ru/forum/misc/11912-preobrazovanie-slozhnojj-stroki-v-massiv.html)

Rifler 21.09.2010 05:12

преобразование сложной строки в массив
 
Доброго времени суток всем

В общем то проблема вот в чем - от сервера приходит ответ(результат перемножения матриц), например
Код:

[1, 2][3, 6]
Как преобразовать эту строку в 2D массив
var arr = [[1, 2], [3, 6]]


Знаю про split, но какое рег. выражение туда записать?

ps: я сделал так: удалил крайние скобки, потом разбить по '][', а потом по ', '. Но может есть способ получше?

рони 21.09.2010 06:55

метод наверно не самый лучший но можно так:
<script type="text/javascript">
str='[1, 2][3, 6]';
eval('var arr=['+str.replace(/\]\[/g,'],[')+']');
document.write(arr[0][0]+' '+arr[0][1]+' '+arr[1][0]+' '+arr[1][1]);
</script>

B~Vladi 21.09.2010 10:52

либо так:
var data = '[1, 2][3, 6]';
var arr = (new Function('return [' + data.replace('][', '], [') + ']'))();
console.log(arr);


Выбирай :)

exec 21.09.2010 13:47

var str = '[1, 2][3, 6]';
str = str.match(/\d+/g);
str = [ [str[0], str[1]], [str[2], str[3]] ]
alert( str );

with-love-from-siberia 21.09.2010 13:53

Цитата:

Сообщение от Rifler
от сервера приходит ответ

Может быт стоит пересмотреть отклик серверной части, чтобы он выглядел так как надо?

Sweet 21.09.2010 14:06

Я бы сделал как exec. Хотя по-уму with-love-from-siberia, конечно, прав.

Kolyaj 21.09.2010 14:09

Парсить регулярками свои же данные -- бред.

B~Vladi 21.09.2010 14:36

За то мой код без проблем сожмется :)

Rifler 21.09.2010 17:36

with-love-from-siberia,
на сервере матрицы перемножаются на python'e вот так
с = a*b
и с сразу идет в ответ. Можно конечно крайние скобки обрезать там, но это не сильно облегчит задачу я думаю

Sweet,
Дело в том, что у exec код привязан к размеру матрицы 2х2 :(

B~Vladi, у тебя тоже почему то работает только для размера 2х2, хотя так и не вкурил почему :( Вроде все верно написано

зы: взял код рони, спасибо

with-love-from-siberia 21.09.2010 19:34

Rifler, Вы
а) либо на сервере генерируйте правильные данные, чтобы клиентская часть "не задумывалась" о корректности данных,
б) либо корректируйте данные на клиенте, универсально, например:
var data = '[1, 2, 3][4, 5, 6][7, 8, 9]';
var arr = eval('[' + data.replace(/\]\[/g, '],[') + ']');

alert(arr.join('\n'));


Часовой пояс GMT +3, время: 12:22.