Array de Objetos en JS

kraneok

Hola gente, estoy atascado en este problemilla:
Resulta que dentro de un array;

var array = []; por ejemplo

Voy metiendo objetos creados con pus, es decir,

array.push(objeto);

Bien, como puedo volver a recuperar ese objeto?, he estado mirando y estudiándolo toda la mañana y no consigo averiguarlo.

Utilizando el bucle for-in tampoco lo logro.

Espero que me podáis arrojar algo de luz, un saludo!.

MTX_Anubis

http://www.w3schools.com/js/js_loop_for_in.asp

for (x in array) {
 var a =  array[x];
...
}

Mucho no has mirado vamos. Realmente ese loop recorre todas las propiedades del objeto, las arrays en javascript son un poco raras.

esto otro también funciona

  for (i=0;i<array.length;i++) {
   var a = array[i];
}

Si escribes lo que tienes hecho pues mejor :P

kraneok

Tal y como lo has puesto me tira undefined, es una de las posibilidades que si probe

MTX_Anubis

por qué no pones tu código?

esto funciona:

var array = [];
undefined
array
[]
array.push({});
1
array.length
1
for (var i=0; i<array.length; i++) {array[i]}
Object
for (i in array) {array[i];}
Object

desde la consola de chrome

1 respuesta
kraneok

Si, en cuanto pueda te meto el codigo, de todos modos voy a probar las posibilidades que me das. No he prpbado cargandp el objeto en una variable, directamente intentaba usar los metodos del objeto

kraneok
this.drawGameObject = function(gameObjectsActives){
	for(var i = 0; i<= gameObjectsActives.length; i++){
		var objeto = gameObjectsActives[i];
		console.log(objeto);
		var gameObjectCreated			= document.createElement('div');
		/*
			gameObjectCreated.id 					= gameObjectsActives[object].getNameGameObject();
			gameObjectCreated.style.width 			= gameObjectsActives[object].getWidthGameObject() + 'px';
			gameObjectCreated.style.height 			= gameObjectsActives[object].getHeightGameObject() + 'px';
			gameObjectCreated.style.marginLeft 		= gameObjectsActives[object].getPositionXgameObject() + 'px';
			gameObjectCreated.style.marginTop 		= gameObjectsActives[object].getPositionYgameObject() + 'px';
			gameObjectCreated.style.background		= gameObjectsActives[object].getColor();
			gameObjectCreated.style.position		= this.graphicsPosition;
		*/
			if(displayGame.appendChild(gameObjectCreated)){
				console.log('Objeto' + ' ' + gameObjectCreated.id + ' ' + 'en pantalla');
			}
		}
	}

#4 Aquí se introducen los objetos

//Creamos un objeto
		this.gameObjects.push(this.skyGO.constructorGameObject(2000, 500, 0, 0, 'cielo', 'url(gameobjects/sky/sky.jpg) repeat-x'));
		this.gameObjects.push(this.terrainGO.constructorGameObject(2000, 100, 0, 540, 'terreno', 'url(gameobjects/terrain/terrain.jpg) repeat-x'));
		this.gameObjects.push(this.cloudGO.constructorGameObject(150, 100, 140, 100, 'nube', 'url(gameobjects/cloud/cloud.png) no-repeat'));
		//Pintamos objetos
		this.graphicsCurrentStage.drawGameObject(this.gameObjects);

Ilumíname xDD

MTX_Anubis
for(var i = 0; i<= gameObjectsActives.length; i++){

es hasta i < gameObjectsActives.length

el bucle for-in lo probaste bien? mira que muchas veces se confunde y lo que te devuelve es el nombre de las propiedades, en este caso los índices del array (puede utilizarse sobre objetos javascript también).

var object = {
 name: 'Name',
 age: 18
}

for (x in object) {
 // x es el string del nombre del atributo: name, age, etc
 object[x] //para acceder al atributo
}

con el array pasa lo mismo, la x toma los valores 0, 1, 2... no cada elemento del array.

Si no es eso pues ni idea, lo único que se me ocurre que no te esté creando bien el GameObject pero vamos, utiliza el debugger y mira a ver el contenido del array.

1 respuesta
kraneok

#7 Ya he solucionado el problema y era por esto:

this.gameObjects.push(this.skyGO.constructorGameObject(2000, 500, 0, 0, 'cielo', 'url(gameobjects/sky/sky.jpg) repeat-x'));

Que tengo que cambiarlo a hacerlo de esta otra forma, cosa que tendré que darle una solución YA

this.skyGO.constructorGameObject(2000, 500, 0, 0, 'cielo', 'url(gameobjects/sky/sky.jpg) repeat-x');
this.gameObjects.push(this.skyGO);

Usuarios habituales

  • kraneok
  • MTX_Anubis