Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/07/2007, 08:48
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Dos tipos de ordenamiento de un array en dos variables

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 4583;

// n a un array de Strings
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 = (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?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.