Ordenando arrays numéricos

Recordando un poco de matemáticas sabemos que una lista de números se está ordenado ascendentemente si cada número de la lista es menor o igual que el siguiente en la lista. De manera similar, una lista está ordenada descendentemente si cada número de la lista es mayor o igual que el siguiente en la lista.

La manera más cómoda de representar una lista de números en javascript es colocarlos en arrays.

Además, los arrays en javascript tienen dos métodos sort() y reverse() que ordenan los elementos del array.

Sin embargo, veremos que si aplicamos estos métodos a arrays con cadenas el comportamiento (ordenación) se corresponde con el esperado. Pero si el array consta de números aparecen las sorpresas.


Indice.

Dividiremos nuestra explicación en los siguientes puntos:
  1. El problema.
  2. Solución.
  3. Código.

1.- El problema.

Ordenando un array de números con los métodos sort() y reverse()

Ordenación Convencional: numeros = [2, 34, 12, 1, 28, 4, 3] =>

Javascript está equivocado porque: a) ascendentemente "12 no es menor que 2" y "28 no es menor que 3"; b) descendentemente "3 no es mayor que 28" y "2 no es mayor que 12

Ordenando un array de letras con los métodos sort() y reverse()

Ordenación Convencional: letras = [a, b, ac, bc, ada, bcd, bb] =>

Javascript actúa correctamente porque ordena las letras en un estricto orden alfabético.

La ordenación sort() o reverse() no sirven para ordenar números porque los ordena alfabéticamente y no matemáticamente. Es decir, un número dentro de un array es considerado por Javascript como una cadena y no como un número.

2.- Solución.

Es posible pasarle al método sort() una función (funciones) que modifique su comportamiento para adecuarloa la ordenación matemática. El esquema es array.sort(nueva_funcion_ordenadora).

Ordenar Modificado: numeros = [2, 34, 12, 1, 28, 4, 3] =>


3.- El código.

function ordAscModif(a,b)

Esta función modifica el método sort() ordenando los números ascedentemente. La llamada se hace así: array_numeros.sort(ordAscModif)


function ordAscModif(a,b){ if (a < b) return -1; if (a > b) return 1; if (a = b) return 0; }
function ordDescModif(a,b)

Esta función modifica el método sort() ordenando los números descendentemente. La llamada se hace así: array_numeros.sort(ordDescModif)


function ordDescModif(a,b){ if (a < b) return 1; if (a > b) return -1; if (a = b) return 0; }


Añadir a Favoritos Internet Explorer

Menú

Categorías


Lo Último

  Mis programas  Matemáticas  Geometría  Programación WEB  Flash MX  Variados
Dedicado a ANGELES y a RAMON.
Realizado por José Antonio López Lorenzo (JALL)
Vigo - Galicia - España -Europa