2010-11-16 23 views
17

Necesito definir un hash para publicar algunos datos ajax usando jQuery. El hash se verá algo como:cómo asignar valor de variable como nombre de variable en un hash?

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

El reto que tengo que resolver es 'set-1' (la tecla de elementos de matriz) debe ser nombrado de forma dinámica en función del valor de var setname.

que desea evitar el uso eval() por supuesto .. en PHP se puede hacer utilizando el doble signo de dólar de la siguiente manera: $$setname, pero lo que es la manera de hacer esto en JavaScript?

Respuesta

29

Usted puede hacer lo que desea de este modo:

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

ver esto en acción en http://jsfiddle.net/x5KRD/.

Todos los objetos de JS se puede acceder mediante dot notación (obj.method() o obj.property), o notación soporte (obj['method']() o obj['property']). El uso de la notación de corchetes le permite especificar dinámicamente los nombres de método/propiedad/clave.

Por ejemplo, aunque torpe, window['alert']('hi') es equivalente a window.alert('hi').

Tenga en cuenta que su código no funcionará como está, de todos modos, porque está utilizando la notación literal del objeto ({'beer','water','wine'}) para contener una matriz (en su lugar debe estar entre corchetes ['beer','water','wine']). Los literales de objeto necesitan tener pares clave-valor.

+0

tienes razón .. mi error, que era una versión simplificada editado, en realidad tiene pares de valores clave en mi real objeto literal. por lo que funciona bien excepto por la asignación dinámica del nombre de la clave ... – mikkelbreum

+0

y necesito hacer esto usando una notación que jQuery.post() aceptará para publicar datos POST ... – mikkelbreum

+0

@mikkelbreum Aclaré de qué estaba hablando. –

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

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

Tienes que entender que en realidad no existe la "notación JSON" en Javascript, es una notación JavaScript nativa de la que estamos hablando. Lo que jQuery quiere es un valor Javascript para los datos POST, no necesariamente un objeto Javascript constante.

Por lo tanto, el código será preparar los datos post como este:

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

y así sucesivamente. Cuando esté listo para hacer el POST, usted acaba de utilizar "elementos":

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