Подтвердить что ты не робот

Как назначить значение переменной в качестве имени переменной в хеше?

Мне нужно определить хэш для размещения некоторых данных ajax с помощью jQuery. Хэш будет выглядеть примерно так:

var setname = 'set_1';
elements = { set_1: {'beer','water','wine'} };

Задача, которую мне нужно решить, - "set-1" (ключ элементов Array), должна быть динамически названа на основе значения var setname.

Я хочу, конечно, избегать использования eval(). в PHP это можно сделать, используя знак двойного доллара следующим образом: $$setname, но как сделать это в JavaScript?

4b9b3361

Ответ 1

Вы можете сделать то, что вам нравится:

var setname = 'set_1', elements = {};
elements[setname] = ['beer','water','wine'];
alert(elements['set_1']); // beer,water,wine

См. это в действии на http://jsfiddle.net/x5KRD/.

Доступ к объектам в JS можно получить с помощью точечной нотации (obj.method() или obj.property) или обозначения скобок (obj['method']() или obj['property']). Использование нотации с помощью скобок позволяет динамически указывать имена методов/свойств/ключей.

Например, в то время как неуклюжий, window['alert']('hi') эквивалентен window.alert('hi').

Обратите внимание, что ваш код не будет работать как есть, так или иначе, потому что вы используете условное обозначение объекта ({'beer','water','wine'}), чтобы содержать массив (он должен быть в квадратных скобках ['beer','water','wine']). Для объектных литералов должны быть пары ключ-значение.

Ответ 2

var setname = 'set_1', 
    elements = {};

elements[setname] = ['beer','water','wine'];

Ответ 3

Вы должны понять, что в Javascript действительно нет такой вещи, как "Обозначение JSON" - это собственная запись Javascript, о которой мы говорим. То, что jQuery хочет, является значением Javascript для данных POST, не обязательно константой объекта Javascript.

Таким образом, ваш код подготовит ваши данные POST следующим образом:

var elements = {};
elements[setName] = { /* something */ };
elements[somethingElse] = { /* something else */ };

и т.д. Когда вы будете готовы выполнить POST, вы просто используете "элементы":

$.post(url, elements, function() { /* callback code */ });