2010-07-01 18 views
10

Imagínese que tenía: <div id names>142,140,150</names>Javascript/HTML, es posible crear nombres de variable de un bucle

pude entonces (en Javascript) escribir una forloop que declara los nombres de variables, con estos valores anexan es decir

var list = document.getElementById('names').innerHTML.Split(','); 

for(i=0; i<list.Length; i++){ 
    var 'beginning' + list[i]; 
} 

así que será esencialmente desee crear:

 
var beginning142 
var beginning140 
var beginning150 

Respuesta

7

Usted puede, en efecto:

window['beginning' + list[i]] = 'value'; 

Divertida coincidencia, respondí una pregunta muy relacionada 10 segundos antes de esta, y luego utilicé exactamente esto como un ejemplo. Entonces a more elaborate explanation on why this works is available here.

+0

+1 por buena respuesta. JavaScript maneja obj.test de la misma manera que obj ["prueba"], y dado que todas las variables que son globales se almacenan en el objeto ventana, puede hacer window ["test"] = "something"; alerta (prueba); y obtener un cuadro de alerta que dice "algo". – Alxandr

3

No puedo agregar un comentario a su pregunta debido a su bajo puntaje de reputación; esto no es una respuesta, sino un consejo. Creo que sería mejor crear única matriz con sus llaves 142,140,150 ...

+1

Su pregunta era si esto era posible o no, no si se lo recomendó. – Alxandr

+1

No obstante. Se requiere una palabra de advertencia, ya que las "variables variables" casi siempre son un error terrible. La mayoría de las personas que preguntan cómo usarlas lo hacen de una manera importante. – bobince

5

se puede hacer algo como esto:

for(var i = 0; i<100; i++) 
{ 
    eval("var beginning"+i); 
} 

Para los desarrolladores tienen miedo de eval Este es uno de los buenos artículos hablando de eval y la forma en que no es un mal: http://www.nczonline.net/blog/2013/06/25/eval-isnt-evil-just-misunderstood/

no estoy diciendo que usted debe ir dirigido hacia fuera y empezar a utilizar eval() todas partes. De hecho, hay muy pocos casos de uso buenos para ejecutar eval() en absoluto. Definitivamente hay dudas con la claridad del código, la debilidad de , y ciertamente el rendimiento que no debe pasarse por alto. Pero no debe tener miedo de usarlo cuando tenga un caso en el que eval() tenga sentido. Trate de no usarlo primero, pero no permita que nadie le asuste haciéndole creer que su código es más frágil o menos seguro cuando eval() se utiliza de forma adecuada.

+2

¡Funciona! En mi opinión, esta solución merece una buena puntuación, muy clara y precisa +1 – Armand

+0

"cuando tienes un caso donde eval() tiene sentido" - ¿Cuál no es este? JavaScript proporciona la estructura de datos del objeto para manejar este problema. – Quentin

3

¿Por qué no define un objeto que tiene esos valores como un atributo en él.

Por ejemplo:

var myVariable = function(id, value){ 
this.Id = id; 
this.Value = value; 
}; 

continuación, sólo puede crear una instancia de este objeto. Creo que es menos complicado y más legible al final.

+0

+1: con la flexibilidad de los objetos JavaScript también conocidos como '{}', es fácil olvidar que crear nuevos tipos de objetos es igualmente fácil. – Anurag

Cuestiones relacionadas