Discussion:
[AS2] Porblemilla con Arrays
(demasiado antiguo para responder)
Fernando
2009-03-13 19:54:08 UTC
Permalink
Tengo el siguiente código con 2 ARRAYS:

var a:Array=new Array("a","b","c");
var b:Array= new Array();

trace("ARRAY A: "+a);
trace("ARRAY B: "+b);

b=a;

trace("Array B = Array A y el resultado es:");
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);

a[0]="X";
a[1]="Y";

trace("Cambiamos los valores del Array A y el resultado es:");
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);

Y el resultado que me sacan los TRACE al ejecutar dicho código son:

ARRAY A: a,b,c
ARRAY B:
Array B = Array A y el resultado es:
ARRAY A: a,b,c
ARRAY B: a,b,c
Cambiamos los valores del Array A y el resultado es:
ARRAY A: X,Y,c
ARRAY B: X,Y,c

Mi pregunta es, ¿porque cuando escribo a[0]="X"; a[1]="Y"; además de
modificar el array a me modifica el array b? Es decir yo en un determinado
momento quiero hacer la asignación de que el array b sea igual al array a,
per una vez hecha la asignación, yo quiero que si cambio los valores del
array a, NO ME CAMBIE los valores que tiene el array b.

La verdad es que estoy un poco alucinado o quizás perdido con este
comportamineto del array b.

Muchas gracias !!!

Fernando
Álvaro Vidal
2009-03-13 20:37:25 UTC
Permalink
Buenos días,

Creo que el problema es de concepto, no de programación, con la acción b=a;
lo que estas haciendo es crear un puntero, no copiando la matriz, de modo
que "b" no almacena el contenido de "a", simplemente te redirige a "a". La
solución es simple, usa este código para compiar la matriz: b = a.slice();

Saludos, Álvaro.
Post by Fernando
var a:Array=new Array("a","b","c");
var b:Array= new Array();
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);
b=a;
trace("Array B = Array A y el resultado es:");
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);
a[0]="X";
a[1]="Y";
trace("Cambiamos los valores del Array A y el resultado es:");
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);
ARRAY A: a,b,c
ARRAY A: a,b,c
ARRAY B: a,b,c
ARRAY A: X,Y,c
ARRAY B: X,Y,c
Mi pregunta es, ¿porque cuando escribo a[0]="X"; a[1]="Y"; además de
modificar el array a me modifica el array b? Es decir yo en un determinado
momento quiero hacer la asignación de que el array b sea igual al array a,
per una vez hecha la asignación, yo quiero que si cambio los valores del
array a, NO ME CAMBIE los valores que tiene el array b.
La verdad es que estoy un poco alucinado o quizás perdido con este
comportamineto del array b.
Muchas gracias !!!
Fernando
Fernando
2009-03-16 08:52:21 UTC
Permalink
Buenos días Álvaro,

Si señor, la solución era tan sencilla como me has dicho (b = a.slice();) ,
pero yo era incapaz de verla

Muchas gracias por tu ayuda y un saludo,

Fernando
Post by Álvaro Vidal
Buenos días,
Creo que el problema es de concepto, no de programación, con la acción
b=a; lo que estas haciendo es crear un puntero, no copiando la matriz, de
modo que "b" no almacena el contenido de "a", simplemente te redirige a
"a". La solución es simple, usa este código para compiar la matriz: b =
a.slice();
Saludos, Álvaro.
Post by Fernando
var a:Array=new Array("a","b","c");
var b:Array= new Array();
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);
b=a;
trace("Array B = Array A y el resultado es:");
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);
a[0]="X";
a[1]="Y";
trace("Cambiamos los valores del Array A y el resultado es:");
trace("ARRAY A: "+a);
trace("ARRAY B: "+b);
ARRAY A: a,b,c
ARRAY A: a,b,c
ARRAY B: a,b,c
ARRAY A: X,Y,c
ARRAY B: X,Y,c
Mi pregunta es, ¿porque cuando escribo a[0]="X"; a[1]="Y"; además de
modificar el array a me modifica el array b? Es decir yo en un
determinado momento quiero hacer la asignación de que el array b sea
igual al array a, per una vez hecha la asignación, yo quiero que si
cambio los valores del array a, NO ME CAMBIE los valores que tiene el
array b.
La verdad es que estoy un poco alucinado o quizás perdido con este
comportamineto del array b.
Muchas gracias !!!
Fernando
Loading...