Ordenación de matriz de JavaScript ()

El método sort () de JavaScript Array ordena los elementos de una matriz.

El sort()método clasifica los elementos de una matriz determinada en un orden ascendente o descendente específico.

La sintaxis del sort()método es:

 arr.sort(compareFunction)

Aquí, arr es una matriz.

Parámetros sort ()

El sort()método incluye:

  • compareFunction (opcional): se utiliza para definir un orden de clasificación personalizado.

Valor de retorno de sort ()

  • Devuelve la matriz después de ordenar los elementos de la matriz en su lugar (lo que significa que cambia la matriz original y no se realiza ninguna copia).

Ejemplo 1: ordenar los elementos de una matriz

Cuando no se pasa compareFunction,

  • Todos los undefinedelementos que no son de matriz se convierten primero en cadenas.
  • Luego, estas cadenas se comparan utilizando su valor de punto de código UTF-16.
  • La clasificación se realiza en orden ascendente.
  • Todos los undefinedelementos se ordenan al final de la matriz.
 // sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)

Salida

 ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50 , 7)

Aquí, podemos ver que la matriz de nombres está ordenada en orden ascendente de la cadena. Por ejemplo, Adam viene antes que Danil porque "A" viene antes que "D".

Dado que todos los elementos no indefinidos se convierten en cadenas antes de ordenarlos, los Numbertipos de datos se ordenan en ese orden.

Aquí, podemos ver que aunque 1000 es mayor que 50 numéricamente, se encuentra al principio de la lista ordenada. Es porque "1" <"5" .

Ejemplo 2: clasificación mediante función personalizada

Cuando se pasa compareFunction,

  • Todos los undefinedelementos que no son de matriz se ordenan según el valor de retorno de compareFunction.
  • Todos los elementos indefinidos se ordenan al final de la matriz y no se llama a compareFunction para ellos.

Supongamos que queremos ordenar la matriz de nombres anterior de modo que el nombre más largo aparezca al final, en lugar de ordenarlo alfabéticamente. Podemos hacerlo de la siguiente manera:

 // custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);

Salida

 ('Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano')

Aquí, la clasificación se basa en la lógica a.length - b.length. Básicamente significa que el elemento con una longitud más corta aparecerá al comienzo del Array.

Primero entendamos cómo funciona el opcional compareFunction.

Cualquiera compareFunctiontiene la siguiente sintaxis:

 function (a, b)( // sorting logic // return a Number )

El sort()método compara todos los valores de la matriz pasando dos valores a la vez al compareFunction. Los dos parámetros ayb representan estos dos valores respectivamente.

El compareFunctiondebe devolver una Number. Este valor devuelto se utiliza para ordenar los elementos de la siguiente manera:

  • Si devuelve valor <0 , a se ordena antes de b (a viene antes de b).
  • Si devuelve un valor> 0 , b se ordena antes de a (b viene antes de a).
  • Si el valor devuelto == 0 , ayb permanecen sin cambios entre sí.

En el Ejemplo 2, ordenamos la matriz usando:

 function len_compare(a, b)( return a.length - b.length; )

Aquí:

  • Si a.length - b.length <0 , a viene antes de b. Por ejemplo, "Adam" viene antes de "Jeffrey" como 4 - 7 <0 .
  • Si a.length - b.length> 0 , b se antepone a a. Por ejemplo, "Danil" viene después de "Ben" como 5 - 3> 0.
  • Si a.length - b.length == 0 , su posición no cambia. Por ejemplo, la posición relativa de "Jeffrey" y "Fabiano" no cambia porque 7 - 7 == 0 .

Podemos ver que esto da como resultado la clasificación de cadenas de acuerdo con su longitud en orden ascendente.

Ejemplo 3: ordenar números numéricamente

Dado que todos los elementos no indefinidos se convierten en cadenas antes de ordenarlos, no podemos ordenar números usando su valor numérico por defecto.

Veamos cómo podemos implementar esto usando una función personalizada.

 // numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);

Salida

 Ascendente - 2,7,14,50,1000 Descendente - 1000,50,14,7,2

En este ejemplo, ordenamos la matriz usando:

 function (a, b) ( return a - b; )

Aquí,

  • Si a - b <0 , a viene antes de b. Por ejemplo, 2 viene antes que 7 como 2 - 7 <0 .
  • Si a - b> 0 , b viene antes de a. Por ejemplo, 1000 viene después de 50 como 1000 - 50> 0.

Podemos ver que esto da como resultado la clasificación de los números según su valor numérico ascendente.

Del mismo modo, podemos utilizarlos b - apara ordenarlos en orden descendente. Tenga en cuenta que también podemos usar la expresión de función de flecha definida en ES2015.

También podemos invertir (orden descendente) la matriz ordenada utilizando el reverse()método de matriz incorporado . Para obtener más información, visite JavaScript Array reverse ().

Articulos interesantes...