Использование переменной в качестве идентификатора в массиве json - PullRequest
9 голосов
/ 29 апреля 2010

Мне интересно, можно ли использовать назначенные переменные в качестве идентификатора в массиве json. Когда я попробовал это, я получил неожиданные результаты:

(код упрощен, параметры передаются другим способом)


var parameter = 'animal';
var value = 'pony';

Util.urlAppendParameters (url, {parameter : value});


Util.urlAppendParameters = function(url, parameters) {
    for (var x in parameters) {
        alert(x);
    }
}

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

Итак, мой вопрос: возможно ли использовать переменную в качестве идентификатора в массиве json, и если да, то не могли бы вы рассказать, как?

Заранее спасибо!

Ответы [ 3 ]

10 голосов
/ 29 апреля 2010

Вам потребуется построить свой объект в два этапа и использовать метод доступа к свойству []:

var parameter = 'animal';
var value = 'pony';

var obj = {};
obj[parameter] = value;

Util.urlAppendParameters (url, obj);

Я не думаю, что JSON Array - более правильный термин, я бы назвал его Object literal .

3 голосов
/ 29 апреля 2010

Нет, вы не можете использовать переменную в качестве идентификатора в таком литерале объекта. Парсер ожидает имя там, так что вы не можете ничего сделать, кроме как предоставить строку. Точно так же вы не могли сделать что-то вроде этого:

var parameter = 'animal';
var parameter = 'value'; //<- Parser expects a name, nothing more, so original parameter will not be used as name

Единственный выход, если вы действительно хотите использовать литерал объекта в одной строке, это использовать eval:

Util.urlAppendParameters (url, eval("({" + parameter + " : value})");
1 голос
/ 29 апреля 2010

В зависимости от ваших потребностей вы также можете создать свой объект с помощью вспомогательной функции;

Util.createParameters = function(args) {
    var O = {};
    for (var i = 0; i < arguments.length; i += 2)
        O[arguments[i]] = arguments[i + 1];
    return O
}

Util.urlAppendParameters (url, Util.createParameters(parameter, value, "p2", "v2"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...