Listado completo de tutoriales

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:

<!DOCTYPE html>
<html>
<head>
  <title>Ejemplo de JavaScript</title>
  <meta charset="UTF-8">
</head>
<body>

<script>
  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:

<!DOCTYPE html>
<html>
<head>
  <title>Ejemplo de JavaScript</title>
  <meta charset="UTF-8">
</head>
<body>

<script>
  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 -1;
  });
  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 -1:

  vec.sort(function(v1,v2) {
    if (v1>v2)
      return 1;
    else
      return -1;
  });

Los parámetros v1 y v2 son los elementos que se comparan:

Si el contenido de v1 es mayor que v2, se sitúa v2 en un indice menor que v1 (debe retornar un valor menor a cero)

Si el contenido de v1 es menor que v2, se sitúa v1 en un indice menor que v2 (debe retornar un valor mayor a cero)

El siguiente método a analizar en éste 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.

<!DOCTYPE html>
<html>
<head>
  <title>Ejemplo de JavaScript</title>
  <meta charset="UTF-8">
</head>
<body>

<script>
  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)

Retornar