Comunidad de diseño web y desarrollo en internet online

Array que duplica registros

Citar            
MensajeEscrito el 09 Dic 2005 07:50 pm
Buenas tardes Sres... :D

Bueno seguramente será una tontería, pero en mis 4 años programando nunca me había pasado.

Lo cierto es que tengo una función a la que le paso un array de datos. La función se encarga de introducir este array que yo le paso en un array padre, aslgo como así:

Código :

var padreArray:Array = new Array();

var datos:Array = new Array();
datos.personales = new Array();

datos.personales.nombre = "Yo";
datos.personales.apellido = "Soy";

addHijo(datos);

datos.personales.nombre = "Él";
datos.personales.apellido = "Es";

addHijo(datos);

//-------------------------------------------
function addHijo(hijo:Array):Void{
   padreArray.push(hijo);
}   


Luego lo que hago es sacar el contenido del padre a ver que ha pasado:

Código :

for(var i in padreArray){
    trace("------------- HIJO -------------");
    for(var j in padreArray[i]){
        trace(j + " -> " + padreArray[i][j]);

        for(var k in padreArray[i][j]){
            trace("-> " + k + " -> " + padreArray[i][j][k]);
        }
    }
}


Y la sorpresa que tengo es que ambos registros son de nombre "Él".

Alguna idea de qué estoy haciendo mal, o por qué no simplemente añade un registro sino que lo añade y modifica todos los anteriores?

Muchísimas gracias y un saludo.

Por johanFX

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Dic 2005 02:04 am
El problema es que lo que estás almacenando en el array "padre" es la referencia al array "datos", y no su contenido. Digamos que las dos posiciones del array "padre" apuntan al array "datos", y lo que estás viendo, es el valor de éste último en los dos casos.

Fíjate que si creas dos variables "datos" y "datos2", ya no te pasa.

De todos modos, yo lo que haría sería:

Código :

var padreArray:Array = new Array();

addHijo("Yo","Soy");

addHijo("Él","Es");

for(var i in padreArray){
    trace("------------- HIJO -------------");
    for(var j in padreArray[i]){
        trace(j + " -> " + padreArray[i][j]);

        for(var k in padreArray[i][j]){
            trace("-> " + k + " -> " + padreArray[i][j][k]);
        }
    }
} 

//-------------------------------------------
function addHijo(nombre:String, apellido:String):Void{
   var datos:Array = new Array();
   datos.personales = new Array();
   
   datos.personales.nombre = nombre;
   datos.personales.apellido = apellido;
   
      padreArray.push(datos);
}    


Salu2

Por Cyril

45 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.