Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.09.2010, 05:12
Новичок на форуме
Отправить личное сообщение для Rifler Посмотреть профиль Найти все сообщения от Rifler
 
Регистрация: 06.07.2010
Сообщений: 2

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

В общем то проблема вот в чем - от сервера приходит ответ(результат перемножения матриц), например
Код:
[1, 2][3, 6]
Как преобразовать эту строку в 2D массив
var arr = [[1, 2], [3, 6]]


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

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

Последний раз редактировалось Rifler, 21.09.2010 в 05:27.
Ответить с цитированием
  #2 (permalink)  
Старый 21.09.2010, 06:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

метод наверно не самый лучший но можно так:
<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 в 13:59. Причина: language="JavaScript" зло
Ответить с цитированием
  #3 (permalink)  
Старый 21.09.2010, 10:52
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

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


Выбирай

Последний раз редактировалось B~Vladi, 21.09.2010 в 10:59.
Ответить с цитированием
  #4 (permalink)  
Старый 21.09.2010, 13:47
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

var str = '[1, 2][3, 6]';
str = str.match(/\d+/g);
str = [ [str[0], str[1]], [str[2], str[3]] ]
alert( str );
Ответить с цитированием
  #5 (permalink)  
Старый 21.09.2010, 13:53
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от Rifler
от сервера приходит ответ
Может быт стоит пересмотреть отклик серверной части, чтобы он выглядел так как надо?
Ответить с цитированием
  #6 (permalink)  
Старый 21.09.2010, 14:06
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Я бы сделал как exec. Хотя по-уму with-love-from-siberia, конечно, прав.
Ответить с цитированием
  #7 (permalink)  
Старый 21.09.2010, 14:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Парсить регулярками свои же данные -- бред.
Ответить с цитированием
  #8 (permalink)  
Старый 21.09.2010, 14:36
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

За то мой код без проблем сожмется
Ответить с цитированием
  #9 (permalink)  
Старый 21.09.2010, 17:36
Новичок на форуме
Отправить личное сообщение для Rifler Посмотреть профиль Найти все сообщения от Rifler
 
Регистрация: 06.07.2010
Сообщений: 2

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

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

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

зы: взял код рони, спасибо
Ответить с цитированием
  #10 (permalink)  
Старый 21.09.2010, 19:34
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

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

alert(arr.join('\n'));
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вытащить массив ссылок с другова сайта Suharik jQuery 2 03.09.2010 17:19
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30
Отфильтровать строки в таблице по заданным критериям Hag1989 Общие вопросы Javascript 0 03.12.2009 02:06
Для события onCLick получить индекс строки и объект грида. progi2007 ExtJS 4 05.08.2009 11:31