Comunidad de diseño web y desarrollo en internet online

Duda con un casting

Citar            
MensajeEscrito el 11 Ago 2008 08:16 pm
Con este script pretendo llenar cada uno de los indices de un array (aArray02) con diversas versiones desordenadas de otro (aArray01).

Código :

//Tengo un Array con una combinacion
var aArray01:Array = [1, 2, 3, 4, 5, 6];
//Creo un 2º Array y meto en su 1er. indice aArray01
var aArray02:Array = new Array();
aArray02[0] = aArray01;


for (var i:int = 0; i < 5; i++) {
   //Desordeno aArray01
   aArray01.sort(fRandomInt);
   trace(aArray01);
   //Esta es la linea que no entiendo. Solo funciona si hago el casting
      aArray02[i] = String(aArray01);
}
function fRandomInt(poA:Object, poB:Object):int {
   return Math.round(Math.random() * 2) - 1;
}
//Comprobacion de lo que se metio en aArray02
trace("\n");
for(var j:int = 0; j < aArray02.length; j++) {
   trace(aArray02[j]);
}

Pero no se por que para que funcione correctamente, en esta linea he de hacer un casting para pasar el resultado a String. Porque si se lo paso como Array lo que hace el script es añadir en todos los indices la misma combinacion. No entiendo por que he de hacer esa conversion a String.

Gracias por vuestra ayuda.

Por oxk4r

56 de clabLevel



 

Orense·España

opera
Citar            
MensajeEscrito el 11 Ago 2008 09:23 pm
Lo que yo no entiendo muy bien es porqué haces el sort dentro del bucle, y luego donde haces :

Código :

aArray02[i] = String(aArray01);


No haces:

Código :

      aArray02[i] = aArray01[i]


Básicamente no puedes copiar todo un array a una posición creo, por eso el cast de string, porqué así te pilla todo el array como un string y te lo mete en la posición (En este caso en todas las posiciones)

Por ur!

256 de clabLevel



 

Barcelona

firefox
Citar            
MensajeEscrito el 11 Ago 2008 10:38 pm
El problema es que cuando asignas un Array a otro Array se asigna por referencia y no por valor, mira este ejemplo de la ayuda:

Código :

var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array = oneArray; // Both array variables refer to the same array.
twoArray[0] = "z";             
trace(oneArray);         // Output: z,b,c.


Por lo tanto si igualas los Arrays, será una referencia al Array1 dentro de cada uno de los entries del Array2, cualquier cambio que hagas en uno se verá reflejado en los otros.

La sintaxis correcta para que el Array2 contenga varios Arrays y no Strings (como sucede ahora) creo que debería ser algo como esto (retomando el ejemplo de la ayuda):

Código :

var oneArray:Array = new Array("a", "b", "c");
var twoArray:Array = oneArray.join(",").split(",");

twoArray[0] = "z";             
trace(oneArray);         // Output: a,b,c.
trace(twoArray);         // Output: z,b,c.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 12 Ago 2008 05:31 pm
Vale, entendido. Se me habia pasado el detalle de lo de la copia/referencia. Muchas gracias por vuestra ayuda. :love:

Por oxk4r

56 de clabLevel



 

Orense·España

opera

 

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