Hola.
Tengo un array inicial
n al que le quiero aplicar dos criterios de ordenación diferentes: de menor a mayor y el inverso, de mayor a menor.
Con
.sort() tengo el primero, y con
.sort().reverse() tengo el segundo, así de fácil.
Pero si intento guardar "copias" de esa ordenación en variables, me funciona de forma anómala:
Código PHP:
// Creo
var n = 4583;
// n a un array de Strings
n = n.toString().split("");
// Lo ordeno de menor a mayor y lo guardo en n0
var n0 = n.sort();
// Le doy la vuelta (porque n ya está ordenado) y lo guardo en n1
var n1 = n.reverse();
document.write(n0 +"<br/>"); // espero 3,4,5,8
document.write(n1 +"<br/>"); // espero 8,5,4,3
// en los dos casos sale 8,5,4,3
Lo que ocurre es que me salen resultados inesperados, es como si las asignaciones no sirvieran para nada:
Código PHP:
var n0 = n.sort();
var n1 = n.reverse();
es lo mismo que
Código PHP:
var n0 = n1 = n.sort().reverse();
¿Cómo se entiende eso? ¿Tengo que hacer una copia del array "manualmente" para tratarlo?
Siempre me ha pasado lo mismo
Código PHP:
//creo
var n = (4583).toString().split("");
//copio
var copiaN = n;
//ordeno la copia
copiaN.sort();
//escribo el original, que se supone que no lo he tocado
document.write(n);
// Resultado esperado: 3,4,5,8; Resultado obtenido: 3,4,5,8;
¿Qué pasa, que se copia por referencia y no por valor? Modifico cualquier cosa de
copiaN y se modifica
n.
¿Cómo lo resolvéis, con la copia "manual" con un bucle por cada elemento?