Как назначить значение переменной в качестве имени переменной в хеш? - PullRequest
18 голосов
/ 17 ноября 2010

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

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

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

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

Ответы [ 3 ]

31 голосов
/ 17 ноября 2010

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

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']). Объектные литералы должны иметь пары ключ-значение.

6 голосов
/ 17 ноября 2010
var setname = 'set_1', 
    elements = {};

elements[setname] = ['beer','water','wine'];
2 голосов
/ 17 ноября 2010

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

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

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

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

$.post(url, elements, function() { /* callback code */ });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...