2012-08-04 16 views
5

Digamos que tengo una matriz de nombres para una variable:¿Cómo crear dinámicamente variables de javascript desde una matriz?

var varNames = new Array("name1","name2","name3"); 

¿Cómo se crea var name1, var name2 y var name3 con solo bucle a través de la matriz varNames?

+2

Por lo general no es una buena idea para crear dinámicamente las variables globales. Quizás si describieras la imagen más grande, alguien podría sugerir un mejor enfoque. – JJJ

Respuesta

6

Esto creará variables globales (en el espacio de nombre global, es decir, window).

var varNames = ["name1","name2","name3"]; 
for (var i=0;i<varNames.length;i+=1){ 
    window[varNames[i]] = 0; 
} 
name1; //=> 0 

Dado que el uso de variables globales se considera una mala práctica, se puede crear variables dentro de un objeto custum:

var myVariables = {} 
    ,varNames = ["name1","name2","name3"]; 
for (var i=0;i<varNames.length;i+=1){ 
    myVariables[varNames[i]] = 0; 
} 
myVariables.name1; //=> 0 

Edición 2017

Usando es≥6:

const [v1, v2, v3] = ["name1","name2","name3"]; 
console.log(v1); // => name1 
+0

¿Hay alguna razón por la que use i + = 1 en lugar de i ++? – Danejir

+1

Fue tomado de Douglas Crockford. Él aconseja no usar el operador '++' para evitar confusiones como: 'var i = 5; var j = i ++;/* j ahora es 5 e i es 6 */ var k = ++ i;/* k ahora es 7 e i es 7 */' – KooiInc

2

Puede hacerlo de la siguiente manera. Agregué las alertas para demostrar que puedes establecer un valor para esas variables.

var varNames = new Array("name1","name2","name3"); 
for(var i = 0; i < varNames.length; i++) { 
    window[varNames[i]] = i; 
} 
alert("name1: " + name1); 
alert("name2: " + name2); 
alert("name3: " + name3); 
1

La respuesta directa a su pregunta sería - lo puede hacer usando eval:

var varNames = new Array("name1","name2","name3"); 

for (var i=0; i<varNames.length; i++) { 
    var varName = varNames[i]; 
    eval("var "+varName); // would be "var name1" 
} 

Tenga en cuenta, pero esto se considera una mala práctica y por lo general no hay ninguna justificación para el uso de eval para tal caso . También tenga en cuenta que es más común para crear matriz usando estilo siguiente:

var varNames = ["name1", "name2", "name3"]; 
Cuestiones relacionadas