in

Ordenar matriz de JavaScript


Ordenar una matriz

los sort() El método ordena una matriz alfabéticamente:

Ejemplo

frutas constantes = [«Banana», «Orange», «Apple», «Mango»];
fruit.sort (); // Clasifica los elementos de las frutas

Inténtalo tú mismo »


Inversión de una matriz

los reverse() El método invierte los elementos de una matriz.

Puede usarlo para ordenar una matriz en orden descendente:

Ejemplo

frutas constantes = [«Banana», «Orange», «Apple», «Mango»];
fruit.sort (); // Primero ordena los elementos de frutas
frutas.reverse (); // Luego invierte el orden de los elementos

Inténtalo tú mismo »


Orden numérico

Por defecto, el sort() función ordena los valores como instrumentos de cuerda.

Esto funciona bien para cadenas («Apple» viene antes que «Banana»).

Sin embargo, si los números se ordenan como cadenas, «25» es más grande que «100», porque «2» es más grande que «1».

Debido a esto, el sort() El método producirá un resultado incorrecto al ordenar números.

Puede solucionar este problema proporcionando un comparar función:

Ejemplo

puntos constantes = [40, 100, 1, 5, 25, 10];
puntos.ordenar (función (a, b) {retorno a – b});

Inténtalo tú mismo »

Use el mismo truco para ordenar una matriz descendente:

Ejemplo

puntos constantes = [40, 100, 1, 5, 25, 10];
puntos.ordenar (función (a, b) {retorno b – a});

Inténtalo tú mismo »



La función de comparación

El propósito de la función de comparación es definir un orden de clasificación alternativo.

La función de comparación debe devolver un valor negativo, cero o positivo, según los argumentos:

function (a, b) {return a – b}

Cuando el sort() La función compara dos valores, envía los valores a la función de comparación y ordena los valores de acuerdo con el valor devuelto (negativo, cero, positivo).

Si el resultado es negativo a se ordena antes
b.

Si el resultado es positivo b se ordena antes a.

Si el resultado es 0, no se realizan cambios con el orden de clasificación de los dos valores.

Ejemplo:

La función de comparación compara todos los valores de la matriz, dos valores a la vez (a, b).

Al comparar 40 y 100, el sort() El método llama a la función de comparación (40, 100).

La función calcula 40 – 100 (a - b), y dado que el resultado es negativo (-60), la función de clasificación clasificará 40 como un valor inferior a 100.

Puede utilizar este fragmento de código para experimentar con la clasificación numérica y alfabética:

Ordenar alfabéticamente
Ordenar numéricamente

function myFunction1 () {
puntos.ordenar ();
document.getElementById ("demostración"). innerHTML = puntos;
}

function myFunction2 () {
puntos.ordenar (función (a, b) {retorno a - b});
document.getElementById ("demostración"). innerHTML = puntos;
}

Inténtalo tú mismo »


Ordenar una matriz en orden aleatorio

Ejemplo

puntos constantes = [40, 100, 1, 5, 25, 10];
points.sort (function (a, b) {return 0.5 – Math.random ()});

Inténtalo tú mismo »


El método Fisher Yates

El ejemplo anterior, formación.sort (), no es exacto, favorecerá algunos números sobre otros.

El método correcto más popular se llama Shuffle de Fisher Yates y se introdujo en la ciencia de datos ya en 1938.

En JavaScript, el método se puede traducir a esto:

Ejemplo

puntos constantes = [40, 100, 1, 5, 25, 10];

para (sea i = puntos. longitud -1; i> 0; i–) {
let j = Math.floor (Math.random () * i)
sea ​​k = puntos[i]

puntos[i] = puntos[j]
puntos[j] = k
}

Inténtalo tú mismo »


Encuentre el valor de matriz más alto (o más bajo)

No hay funciones integradas para encontrar el valor máximo o mínimo en una matriz.

Sin embargo, después de haber ordenado una matriz, puede usar el índice para obtener los valores más altos y más bajos.

Clasificación ascendente:

Ejemplo

puntos constantes = [40, 100, 1, 5, 25, 10];
puntos.ordenar (función (a, b) {retorno a – b});
// ahora apunta[0] contiene el valor más bajo
// y puntos[points.length-1] contiene el valor más alto

Inténtalo tú mismo »

Clasificación descendente:

Ejemplo

puntos constantes = [40, 100, 1, 5, 25, 10];
puntos.ordenar (función (a, b) {retorno b – a});
// ahora apunta[0] contiene el valor más alto
// y puntos[points.length-1] contiene el valor más bajo

Inténtalo tú mismo »

Ordenar una matriz completa es un método muy ineficiente si solo desea encontrar el valor más alto (o más bajo).


Usando Math.max () en una matriz

Puedes usar Math.max.apply para encontrar el número más alto en una matriz:

Ejemplo

function myArrayMax (arr) {
return Math.max.apply (null, arr);
}

Inténtalo tú mismo »

Math.max.apply(null, [1, 2, 3]) es equivalente a Math.max(1, 2, 3).


Usando Math.min () en una matriz

Puedes usar Math.min.apply para encontrar el número más bajo en una matriz:

Ejemplo

function myArrayMin (arr) {
return Math.min.apply (null, arr);
}

Inténtalo tú mismo »

Math.min.apply(null, [1, 2, 3]) es equivalente a Math.min(1, 2, 3).


Mis métodos mínimos / máximos de JavaScript

La solución más rápida es utilizar un método «hecho en casa».

Esta función recorre una matriz que compara cada valor con el valor más alto encontrado:

Ejemplo (Find Max)

function myArrayMax (arr) {
let len ​​= arr.length;
let max = -Infinity;
while (len–) {

si (arr[len] > max) {

max = arr[len];
}
}
return max;
}

Inténtalo tú mismo »

Esta función recorre una matriz comparando cada valor con el valor más bajo encontrado:

Ejemplo (Find Min)

function myArrayMin (arr) {
let len ​​= arr.length;
sea ​​min = Infinito;
while (len–) {

si (arr[len]
min = arr[len];
}
}
retorno min;
}

Inténtalo tú mismo »


Ordenar matrices de objetos

Las matrices de JavaScript a menudo contienen objetos:

Ejemplo

coches const = [
 
{type:»Volvo», year:2016},
 
{type:»Saab», year:2001},
 
{type:»BMW», year:2010}
];

Incluso si los objetos tienen propiedades de diferentes tipos de datos, el sort() El método se puede utilizar para ordenar la matriz.

La solución es escribir una función de comparación para comparar los valores de las propiedades:

Comparar las propiedades de las cadenas es un poco más complejo:

Ejemplo

cars.sort (function (a, b) {
sea ​​x = a.type.toLowerCase ();
sea ​​y = b.type.toLowerCase ();
if (x
if (x> y) {return 1;}
return 0;
});

Inténtalo tú mismo »


Referencia de matriz completa

Para obtener una referencia completa, vaya a nuestra Referencia completa de matrices de JavaScript.

La referencia contiene descripciones y ejemplos de todas las propiedades y métodos de Array.