Foros del Web » Programando para Internet » Javascript »

Declarar objetos secuencialmente (dentro de un bucle).)

Estas en el tema de Declarar objetos secuencialmente (dentro de un bucle).) en el foro de Javascript en Foros del Web. Buenos días, me he registrado en este foro esperando contar con vuestra ayuda. Dado que mis conocimientos de javaScript son bastante escasos. El problema consite ...
  #1 (permalink)  
Antiguo 28/11/2010, 11:18
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 4 meses
Puntos: 0
Declarar objetos secuencialmente (dentro de un bucle).)

Buenos días, me he registrado en este foro esperando contar con vuestra ayuda. Dado que mis conocimientos de javaScript son bastante escasos.

El problema consite en:

-Necesito crear una función que me declare un número n de nuevas variables (bueno, en verdad son objetos Marker del API de google maps); donde n es la dimensión de un array pasado como parámetro.

-Las variables se llamarán Localizacion1, Localizacion2, Localizacion3... Localizacionn y desconozco las dimensiones que tendrá a priori el vector.

-He intentado dentro de un bucle "for" (for (i=0;i<=vector.length-1;i++)) crear primero los nombres (var nombre="Localizacion"+i;) y luego meterle la sentencia (var nombre;). Y como era de esperar, no ha funcionado.

Bueno. No se si me he explicado bien, y si mi duda ha quedado bien clarificada. Quedo a la espera de vuestras respuestas y os agradezco el tiempo y el esfuerzo.
  #2 (permalink)  
Antiguo 28/11/2010, 11:45
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Declarar objetos secuencialmente (dentro de un bucle).)

¿no te sería más fácil si creas otro array dentro de la función y en el bucle lo vas llenando con los objetos marker? luego al final devuelves ese array y lo almacenas en otra variable o propiedad.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 28/11/2010, 14:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Declarar objetos secuencialmente (dentro de un bucle).)

Hola zerokilled y gracias por contestar.

Disculpa si estoy diciendo alguna burrada, pero tenia entendido que en un array no podía almacenar objetos. Para ello estaban las colecciones, y estas no están disponibles con JavaScript.

Suponiendo que si puedo almacenar un objeto en un array: imagino que usando el método push, ¿cierto?.

De cualquier modo, sigo teniendo el mismo problema; que es la declaración del objeto, pues no puedo declararlo como" var Localizacioni;" (donde i sea un contador). Salvo claro está, que yo pueda hacer una declaración del tipo" var vector[i];". ¿Es a esto a lo que te refieres?.

Muchas gracias.
  #4 (permalink)  
Antiguo 28/11/2010, 15:15
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Declarar objetos secuencialmente (dentro de un bucle).)

Cita:
... tenia entendido que en un array no podía almacenar objetos. Para ello estaban las colecciones, y estas no están disponibles con JavaScript.
en javascript, los arrays pueden almacenar cualquier tipo de valor; lo mismo que puedes retener en una variable lo puedes retener en un array. los arrays son contenedores, lo único que indexados.

Código:
var array = [
[], // array
{}, // object
0, // integer
'string', // string
true, // boolean
function(){} // function
];

// en este ejemplo cada elemento tiene diferentes tipos de valores y todos estan contenido en un array ;
no tengo idea de que son las colecciones en el contexto de otros lenguajes pero en javascript las colecciones son estructuras bien parecidas a los arrays. es decir, son indexados. lo único que no tienen los mismos métodos que los arrays y el valor de cada elemento representa elementos HTML.

Cita:
imagino que usando el método push, ¿cierto?.
es correcto.

Cita:
pues no puedo declararlo como" var Localizacioni;" (donde i sea un contador). Salvo claro está, que yo pueda hacer una declaración del tipo" var vector[i];". ¿Es a esto a lo que te refieres?.
como ya comentaba, en javascript no puedes crear variables al vuelo. mas bien puedes pero de la forma "sucia": eval.
Código:
eval("var nombre"+ variable+ " = valor;");
pero esa forma trae otras complicaciones técnicas además de que es más complicado el mantenimiento del código. la solución que proponía es crear un array y con el bucle lo vas llenando de objetos Marker. luego, cuando necesites hacer referencia a uno de esos objetos utilizas el indice. a mi juicio esta solución es mas limpia vs crear multiples variables. por ejemplo, en multiples variables:
  • ¿cómo vas a determinar cuantas variables se crearon?
  • si fueras hacer referencia al vuelo a una de las variables, tendrías que constantemente evaluar código javascript para integrar el número con el prefijo y así formar el nombre completo.
con un array: el nombre siempre será el mismo; solo te tienes que ocupar de indicar el indice; es más organizado puesto que todos los datos se relacionan, es decir todos son objetos Marker.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 28/11/2010, 15:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Declarar objetos secuencialmente (dentro de un bucle).)

Ok zerokilled, ya te he captado, en cada paso del bucle declaro un marker y acto seguido lo meto en el vector.

A lo largo de la semana lo voy poniendo en práctica.

Muchas gracias, pues me has desbloqueado un asunto que ya venía de largo.

Editado: Las colecciones en .NET son "colecciones" (valga la redundancia) de objetos que no tienen por que ser de la misma naturaleza (al contrario que los Arrays).

Última edición por nessemar; 28/11/2010 a las 15:47

Etiquetas: bucle, declarar, objetos
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 09:41.