Ассоциативный массив JavaScript - передача строки в виде ключа массива: пары значений - PullRequest
1 голос
/ 06 марта 2012

Я знаю, что могу создать ассоциативный массив следующим образом:

var MyAssocArray = {'sky':'blue', 'grass':'green'};

И я очень люблю использовать этот метод.

Что я хотел бы сделать, и у меня возникли проблемыс это:

У меня сохраняются строки, как это:

var MyString = "'sky':'blue', 'grass':'green'";

И я хочу быть в состоянии сделать это сейчас:

var MyAssocArray = {MyString};

Когда я пытаюсь это сделать- Я получаю эту ошибку:

invalid object initializer

Что я делаю не так?Как мне этого добиться?Любая помощь будет принята с благодарностью


Нашел другое решение, используя PHP и Javascript.Строка ассоциативного массива отражена в javascript

var Multidimensional_Arr[Multidimensional_Array_Key_Name] = {<?php echo $String_Pulled_From_Database; ?>}; // i.e. 'sky':'blue', 'grass':'green'

//Same can be done for single dimension array
var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}; // i.e. 'sky':'blue', 'grass':'green'

Надеюсь, это кому-нибудь пригодится

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

Использовать JSON - это сериализованная нотация объектов Javascript и довольно близко к тому, что вы делаете.

Вам нужно будет сделать

var MyAssocArray = JSON.parse(MyString);

Кроме того, JSON использует двойные кавычки, а не одинарные; если вы используете простые объекты, вы, вероятно, можете написать код, который просто заменит ' на " "в ваших строках, но это сложно, если строки содержат двойные кавычки.

edit: Если вы используете браузер, который не реализует JSON.parse (), вы можете использовать реализацию на веб-сайте JSON (см. Ссылки внизу этой страницы ) или если вы вы используете jQuery, есть jQuery.parseJSON ()


Редактировать # 2: Предупреждение : Ваше решение подвержено угрозе безопасности, если только вы не уверены, что данные в базе данных были очищены:

 var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}

Это эквивалентно звонку на eval(); если в вашей строке базы данных есть какой-либо вредоносный код, он может делать плохие вещи. Это одна из причин, по которой был изобретен JSON - до его оценки легко убедиться, что его содержимое является действительным (и, следовательно, безопасным).

Ваша общая архитектура, как вы ее нам представляли, - это [данные в базе данных] -> серверный PHP -> клиентский Javascript. Это классический пример сериализованных данных. Я понимаю, что у вас могут быть ограничения, чтобы ваша система работала без перебоев, но строгий формат сериализации сделает вашу систему более безопасной.

0 голосов
/ 06 марта 2012

Если вы уверены, что данные в безопасности, то вы можете сделать:

var MyAssocArray = eval('{' + MyString + '}');
0 голосов
/ 06 марта 2012

Вы не можете сделать это.

Чтобы достичь желаемого, используйте функцию split (), чтобы сначала разбить вашу строку на токены, разделенные запятыми.Затем каждый токен должен быть разделен символом «:».Затем вставьте два токена, полученные последним разделением, в качестве ключа и значения вашего ассоциативного массива.

...