sábado, 1 de julio de 2017

Javascript Parte XLIX

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)

No hay comentarios.:

Publicar un comentario