Foros del Web » Programando para Internet » Javascript »

Cómo recuperar variables con nombres dinámicos

Estas en el tema de Cómo recuperar variables con nombres dinámicos en el foro de Javascript en Foros del Web. Buenas tardes a todos los foristas: Estoy revisando algunos códigos que dejó un compañero que ya no trabaja en la empresa y veo que tiene ...
  #1 (permalink)  
Antiguo 25/07/2013, 09:21
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Cómo recuperar variables con nombres dinámicos

Buenas tardes a todos los foristas:

Estoy revisando algunos códigos que dejó un compañero que ya no trabaja en la empresa y veo que tiene mucho código repetitivo... por ejemplo me he encontrado con una función que contiene lo siguiente:

Código Javascript:
Ver original
  1. var variable1 = new Array();
  2. var variable2 = new Array();
  3. var variable3 = new Array();
  4. var variable4 = new Array();
  5. var variable5 = new Array();
  6.  
  7.  
  8. function actualizaVariable(a)
  9. {
  10. ....
  11.  switch (a) {
  12.             case 1:
  13.               variable1 = [campo1, campo2, campo3, campo4, campo5, campo6];
  14.               break;
  15.             case 2:
  16.               variable2 = [campo1, campo2, campo3, campo4, campo5, campo6];
  17.               break;
  18.             case 3:
  19.               variable3 = [campo1, campo2, campo3, campo4, campo5, campo6];
  20.               break;
  21.             case 4:
  22.               variable4 = [campo1, campo2, campo3, campo4, campo5, campo6];
  23.               break;
  24.             case 5:
  25.               variable5 = [campo1, campo2, campo3, campo4, campo5, campo6];
  26.               break;
  27. end;
  28. ....
  29. }

antes y después del switch hay código adicional, por eso los puntos suspensivos...

Este switch() en realidad es más amplio, son casi 40 casos y cerca de 35 campos en cada asignación, por lo que se imaginaran que el código resultante es inmenso... mi pregunta es si en javascript hay alguna forma de asignar valores variables de manera dinámica. Si observan todos los arreglos que se declaran antes de la función varian sólo por un índice, por lo tanto el nombre de la variable que se tiene que asignar podría constuirse como una concatenación, es decir, todo este switch podría cambiarse por algo tan simple como esto:

Código Javascript:
Ver original
  1. "variable" + indice = [campo1, campo2, campo3, campo4, campo5, campo6];

La pregunta es si es posible hacer algo como esto con javascript... hay alguna manera de poder referenciar una variable construyendo su nombre de manera dinámica???

De antemano muchas gracias por el apoyo

Saludos
Leo.
  #2 (permalink)  
Antiguo 25/07/2013, 09:50
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 8 meses
Puntos: 103
Respuesta: Cómo recuperar variables con nombres dinámicos

mira, o se donde estan las variables almacenadas. pero si fueran globales podes hacer esto
Código Javascript:
Ver original
  1. for(var i = 1;i<6;i++){
  2.   var variableElegida = window.['variable'+i]
  3. console.log(variableElegida);
  4. }

de todos modos no es recomendable lo que esta haciendo ahí, utiliza arrays dentro de arrays mejor
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #3 (permalink)  
Antiguo 25/07/2013, 10:08
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Cómo recuperar variables con nombres dinámicos

Pequeña corrección:

Es
Código Javascript:
Ver original
  1. window['variable'+i]
En lugar de
Código Javascript:
Ver original
  1. window.['variable'+i]
__________________
blog | @aijoona
  #4 (permalink)  
Antiguo 25/07/2013, 11:09
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Cómo recuperar variables con nombres dinámicos

Hola Aijoona y chwc:

Antes que nada, gracias por contestar:

Probé la solución que me indicaron, sin embargo no me funcionó

Encontré esta página donde me ofrecen la misma solución:

http://www.etnassoft.com/2011/01/05/...-alternativas/

Sin embargo al querer implementarla simplemente no se asigna el valor a la variable, hice un pequeño ejemplo con una página JSP así:

Código HTML:
Ver original
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html>
  3.   <head>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.     <title>JSP Page</title>
  6.     <script>
  7.       function prueba(indice)
  8.       {
  9.         var ren1 = 'nada';
  10.         alert(indice);
  11.         alert(ren1);
  12.         //eval('ren' + indice + '=\'algo\'');
  13.         window['ren' + indice] = 'algo';
  14.         alert("ren1: " + ren1);              
  15.       }
  16.     </script>
  17.   </head>
  18.   <body>
  19.     <h1>Hello World!</h1>
  20.     <form id="forma">
  21.       <input type="button" onclick="prueba('1');" value="Prueba" />
  22.     </form>
  23.   </body>
  24. </html>


Cuando lo ejecuto con la función window simplemente no actualiza el valor, al hacer el último alert me regresa como resultado:

Código:
ren1: nada
Es decir, no me actualiza el valor de la variable... si observan tengo comentada una línea donde utilizo EVAL, que es otra de las alternativas que encontré en la página que mencioné al inicio... cuando utilizo EVAL en lugar de window si me ejecuta correctamente el resultado y obtengo lo siguiente:

Código:
ren1: algo
En realidad no veo nada distinto a lo que aquí me comentan, no sé por qué razón la función window no funciona... alguno de ustedes sabe por qué

Por lo pronto utilizaré la forma EVAL que si funciona, aunque tengo algo de recelo por lo que aparece al inicio del mismo documento:

Cita:
“eval es el mal: la función eval es la mayor característica en el mal uso de Javascript. Evítala.”
Douglas Crockford, JavaScript: The Good Parts
Saludos!
Leo

Etiquetas: nombres, variable, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:52.