Array: métodos sort y reverse |
Otro método muy útil de la clase Array es sort. La sintaxis más sencilla y por defecto es para ordenar una lista de string:
<html> <head> </head> <body> <script type="text/javascript"> var nombres=['marcos','ana','luis','jorge','carlos']; var f; document.write('Vector antes de ordenarlo<br>'); for(f=0;f<nombres.length;f++) { document.write(nombres[f]+'<br>'); } nombres.sort(); document.write('Vector después de ordenarlo<br>'); for(f=0;f<nombres.length;f++) { document.write(nombres[f]+'<br>'); } </script> </body> </html>
Como vemos creamos un vector con una lista de string:
var nombres=['marcos','ana','luis','jorge','carlos'];
Luego con llamar simplemente al método sort el mismo se encarga de intercambiar las componentes de tal forma que el menor alfabéticamente se encuentra al principio y así sucesivamente:
nombres.sort();
Para ordenar una lista de enteros se complica el algoritmo ya que debemos pasar al método sort una función anónima indicando como implementar la comparación entre elementos:
<html> <head> </head> <body> <script type="text/javascript"> var vec=[100,5,60,3,90]; var f; document.write('Vector antes de ordenarlo<br>'); for(f=0;f<vec.length;f++) { document.write(vec[f]+'<br>'); } vec.sort(function(v1,v2) { if (v1>v2) return 1; else return 0; }); document.write('Vector después de ordenarlo<br>'); for(f=0;f<vec.length;f++) { document.write(vec[f]+'<br>'); } </script> </body> </html>
Como vemos al método sort hemos pasado una función que retorna un 1 o 0:
vec.sort(function(v1,v2) { if (v1>v2) return 1; else return 0; });
Los parámetros v1 y v2 son los elementos que se comparan. Si v1 es mayor a v2 significa que queremos intercambiarlos para que el mayor se desplace hacia el final del vector. Esta función debe retornar un valor mayor a cero si queremos que se intercambien los elementos y cero si queremos dejar los dos elementos del vector sin ser intercambiados.
El siguiente método a analizar en este concepto es reverse(), como podemos intuir este método invierte el orden de los elementos del vector. Nos puede ser de utilidad si tenemos ordenado un vector en orden ascendente y lo queremos en forma descendente.
Problema
Crear un vector con 10 elementos enteros con valores aleatorios. Ordenarlos de menor a mayor. Luego invertir el vector para verlo de mayor a menor.
<html> <head> </head> <body> <script type="text/javascript"> var vec=new Array(10); var f; for(f=0;f<vec.length;f++) { vec[f]=parseInt(Math.random()*1000); } vec.sort(function(v1,v2) { if (v1>v2) return 1; else return 0; }); document.write('Vector ordenado en forma ascendente<br>'); for(f=0;f<vec.length;f++) { document.write(vec[f]+'<br>'); } vec.reverse(); document.write('Vector ordenado en forma descendente<br>'); for(f=0;f<vec.length;f++) { document.write(vec[f]+'<br>'); } </script> </body> </html>
El resultado de ejecutar el programa es:
Vector ordenado en forma ascendente 32 131 329 364 488 515 860 864 919 919 Vector ordenado en forma descendente 919 919 864 860 515 488 364 329 131 32
Como vemos luego de imprimirlo en forma ordenada procedemos a llamar al método reverse() que invierte los elementos del vector (es decir el último pasa a ser primero, el anteúltimo pasa a ser segundo y así sucesivamente)