Ordenar matrices en JavaScript

O

Como muchos otros lenguajes populares, JavaScript viene convenientemente con un método incorporado para ordenar matrices. Si bien el resultado final es el mismo, los distintos motores de JavaScript implementan este método utilizando diferentes algoritmos de ordenación:

  • V8: Clasificación rápida o clasificación por inserción (para matrices más pequeñas)
  • Firefox: combinar ordenación
  • Safari: Clasificación rápida, Clasificación por combinación o Clasificación por selección (según el tipo de matriz)

La implementación realmente no importa para el código de llamada, pero es interesante ver estos algoritmos de clasificación usados ​​en la práctica después de aprender sobre ellos durante tanto tiempo en las clases de introducción a CS.

Esta función de clasificación está disponible como método prototipo en el Array clase:

Array.sort([compareFunc])

En la verdadera forma de JavaScript, se pasa una devolución de llamada a esta función que se usa para decirle al algoritmo de clasificación cómo se comparan dos elementos entre sí. los compareFunc debe tener dos parámetros, a y b, y funciona así:

  • Si compareFunc devuelve 0, entonces los elementos se tratan como iguales
  • Si compareFunc devuelve 1 entonces b se ordena antes a
  • Si compareFunc devuelve -1 entonces a se ordena antes b

La función no necesita necesariamente devolver 1 o -1, siempre y cuando los números devueltos sean 0, por encima de 0 o por debajo de 0. Por lo tanto, una función de comparación como (a, b) => a - b; es perfectamente válido.

Si el compareFunc no se proporciona, los elementos se convierten en cadenas y luego se ordenan alfabéticamente. Esto hace que la clasificación de cadenas sea trivial. Sin embargo, aunque parece que ordenar números debería ser sencillo, en realidad puede ser un poco confuso aquí:

> let nums = [3, 2, 6, 50, 10];
> nums.sort()
[ 10, 2, 3, 50, 6 ]

Como puede ver, los números no están en el orden que esperaba. Esto se debe a que, como se mencionó anteriormente, el método de clasificación predeterminado es convertir los elementos en cadenas antes de realizar la comparación. Y como cadena, “50” viene antes de “6”, por lo que 50 no es el último en la matriz. Para ordenar esta matriz correctamente, intente lo siguiente en su lugar:

> let nums = [3, 2, 6, 50, 10];
> nums.sort((a, b) => a - b);
[ 2, 3, 6, 10, 50 ]

Nota: Es importante tener en cuenta que este método ordena en el lugar, lo que significa que la matriz original está realmente ordenada y no se realiza ninguna copia. Entonces, mientras el .sort() El método devuelve la matriz ordenada, en realidad no es necesario asignarla a nada, ya que la matriz a la que se llama está ordenada.

Si desea invertir el orden de clasificación, simplemente cambie la comparación de a y b. Entonces, si queremos que los números estén en orden descendente, debe hacer lo siguiente:

> let nums = [3, 2, 6, 50, 10];
> nums.sort((a, b) => b - a);
[ 50, 10, 6, 3, 2 ]

Ordenar matriz de objetos

El uso de una función de comparación como esta hace que sea extremadamente fácil ordenar objetos personalizados en JavaScript. Por ejemplo, digamos que tenemos la siguiente lista de datos de usuario:

let users = [
    {name: 'Scotty', age: '18'},
    {name: 'Tommy', age: '21'},
    {name: 'Sally', age: '71'},
    {name: 'Billy', age: '18'},
    {name: 'Timmy', age: '21'}
];

Esto no es algo que el algoritmo de clasificación pueda simplemente interpretar y clasificar por sí mismo. El orden también depende en gran medida de la aplicación. ¿Qué pasa si queremos ordenar por edad y luego nombrar? Para hacerlo, podríamos proporcionar un comparador que combine los dos:

users.sort((a, b) => {
    let keyA = a.age + a.name;
    let keyB = b.age + b.name;
    if (keyA < keyB) return -1;
    if (keyA > keyB) return 1;
    return 0;
});

Esto dará como resultado la siguiente matriz ordenada:

[ { name: 'Billy', age: '18' },
  { name: 'Scotty', age: '18' },
  { name: 'Timmy', age: '21' },
  { name: 'Tommy', age: '21' },
  { name: 'Sally', age: '71' } ]

Observe que ahora todos los usuarios están ordenados por edad. Y, según lo previsto, los usuarios con la misma edad se ordenan por nombre, como Billy y Scotty.

Conclusión

En este breve artículo, vimos cómo usar el .sort() método para ordenar fácilmente matrices en JavaScript. Esto se aplica a cualquier tipo de datos, incluidas cadenas, números o incluso objetos. El orden de clasificación está determinado por el compareFun método de devolución de llamada, que es lo que le permite determinar el orden de clasificación o qué propiedades del objeto determinan el orden de clasificación.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad