2013-03-25 10 views
1

Чтобы преобразовать строку в одномерный массив JavaScript, я мог бы использовать 'eval()'. Но как преобразовать строку в двумерный массив?Как преобразовать строку в 2-мерный массив?

Моя строка:

['stage 1', 1, 11, 111],['Stage 2', 2, 22, 222] 

Execution "Eval (...)" с такой параметр создает 1 массив из 4 элементов: [ 'этап', 1, 11, 111]. Вместо этого я хотел бы иметь массив из 2 элементов, где каждый элемент, в свою очередь, представляет собой еще один массив из 4 элементов.

Я считаю, что я мог бы разбить исходную строку на «,» в список подстрок и вызвать «eval» для каждого из них и объединить результат в двумерный массив.

Но Я считаю, что более эффективный путь должен уже существовать. Есть ли? Если да, пожалуйста, сообщите.

спасибо, что заблаговременно!

+0

Просто завернуть во внешней паре скобок: ' '[' + строка +] «'. – RobG

ответ

3

Вместо того, чтобы использовать eval было бы лучше использовать JSON.parse:

var string = '["stage 1", 1, 11, 111],["Stage 2", 2, 22, 222]'; 
var array2d = JSON.parse("[" + string + "]"); 
console.log(array2d); 

Смотрите демо здесь: http://jsfiddle.net/y94zz/

+1

«Лучше» относительно, почему это лучше, чем «eval»? Прокладка JSON.parse будет использовать 'eval' в любом случае. – RobG

+0

Почему вы используете 'eval', когда существует гораздо лучший метод, такой как' JSON.parse'? При использовании 'eval', вы даже не можете минимизировать свой код с помощью любого стандартного minifier/compiler! – spaceman12

+0

@RobG - Все основные браузеры теперь поддерживают 'JSON.parse', есть прокладки, которые не используют' eval' (например, собственный [JSON-js] Крокфорда (https://github.com/douglascrockford/JSON-js) - см. 'json_parse.js' или' json_parse_state.js'), а 'JSON.parse' гораздо безопаснее использовать, чем' eval', поскольку он не будет выполнять произвольный код и не изменять переменные в вызывающем контексте. –