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?
| |||
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? |
| |||
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 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. |
| |||
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 No garantizo que funcione, pero la idea es esa Saludos. |
| |||
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. |