Foros del Web » Programando para Internet » Javascript »

tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

Estas en el tema de tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien en el foro de Javascript en Foros del Web. a=new Array("a","b","c"); b=a; a[0]="j"; porke al hacer eso tambien me modifica la matriz de b?? como puedo hacer q sean independiente a de b? sin ...
  #1 (permalink)  
Antiguo 24/06/2009, 14:00
 
Fecha de Ingreso: marzo-2007
Mensajes: 63
Antigüedad: 17 años, 1 mes
Puntos: 0
tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

a=new Array("a","b","c");
b=a;
a[0]="j";


porke al hacer eso tambien me modifica la matriz de b??
como puedo hacer q sean independiente a de b? sin tener q escribir denuevo la matriz?
  #2 (permalink)  
Antiguo 24/06/2009, 14:12
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

Se modifica b porque luego de la asignación tanto a como b apuntan al mismo objeto (el vector que creaste en la primera línea.)

Si quieres copiar una matriz unidimensional, lo que debes usar es el método slice()
Código javascript:
Ver original
  1. b = a.slice(0);

Si es bi, tri o n-dimensional, la copia es un poco más complicada (involucra un for que vaya comprobando si cada elemento de la matriz es una matriz o un objeto simple)


Saludos.
  #3 (permalink)  
Antiguo 24/06/2009, 14:26
 
Fecha de Ingreso: marzo-2007
Mensajes: 63
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

si la copia es bidimencional
  #4 (permalink)  
Antiguo 24/06/2009, 14:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

En ese caso, dado que slice() hace una copia en 1 nivel, creo que tendrás que usar un código como este:
Código javascript:
Ver original
  1. /* a definido previamente como matriz de 2 dimensiones */
  2. var largo_a = a.length;
  3. var i = 0;
  4. var b;
  5.  
  6. for ( i=0; i<largo_a; i++ ) {
  7.     if ( typeof a[i] == "Object" ) {
  8.         /* en javascript, typeof Array = Object :-( */
  9.         b[i] = a[i].slice();
  10.     } else {
  11.         b[i] = a[i];
  12.     }
  13. }

No garantizo que funcione, pero la idea es esa


Saludos.
  #5 (permalink)  
Antiguo 24/06/2009, 17:20
 
Fecha de Ingreso: marzo-2007
Mensajes: 63
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

esta bien gracias pero me sorprende q no aya una manera mas directa y simple
  #6 (permalink)  
Antiguo 24/06/2009, 21:23
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: tengo una matriz a y pongo b=a y modifico a por q me modifica b tambien

Tiene que ver con el hecho de que las variables que apuntan a objetos son referencias, por lo que cuando las copias estás copiando la referencia y no el objeto en sí.

Cuando haces una copia de los objetos y no de las referencias (como lo que hace split()) debes tener en cuenta que esos objetos que copias pueden tener a su vez referencias a otros. Pero split() no va y copia también esos objetos referenciados, sino que copia la referencia.

Es algo con lo que se requiere cuidado, y siempre hay que intentar conocer qué es lo que las asignaciones realmente hacen.


Saludos.
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 23:04.