Используя переменную как идентификатор в массиве json

Я задаюсь вопросом, возможно ли использовать присвоенные переменные в качестве идентификатора в массиве 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, и если так, Вы могли сказать мне как?

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

9
задан Robbert van den Bogerd 29 April 2010 в 14:50
поделиться

3 ответа

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

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})");
3
ответ дан 4 December 2019 в 14:27
поделиться

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

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"));
1
ответ дан 4 December 2019 в 14:27
поделиться

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

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

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

Util.urlAppendParameters (url, obj);

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

10
ответ дан 4 December 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: