Ordenamiento de arreglos de JavaScript

sort() El método es uno de los métodos más poderosos de arrays.

Ordenamiento de arrays

sort() El método ordena los arrays en orden alfabético:

Ejemplo

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Ordena los elementos en fruits

Prueba por tu cuenta

Invierte el array

reverse() El método invierte los elementos del array.

Puede usarlo para ordenar el array en orden descendente:

Ejemplo

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // Ordena los elementos en fruits
fruits.reverse();         // Invierte el orden de los elementos

Prueba por tu cuenta

Ordenamiento numérico

Por defecto,sort() La función ordenaCadenasordenar los valores.

Esta función es adecuada para cadenas ("Apple" se colocará antes de "Banana").

Sin embargo, si los números se ordenan como cadenas, "25" es mayor que "100", porque "2" es mayor que "1".

Por lo tanto,sort() El método produce resultados incorrectos al ordenar números.

A través de unaFunción de比值Para corregir este problema:

Ejemplo

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

Prueba por tu cuenta

Usa la misma técnica para ordenar el array en orden descendente:

Ejemplo

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

Prueba por tu cuenta

Función de比值

El objetivo de la función de comparación es definir otro orden de clasificación.

La función de comparación debe devolver un valor negativo, cero o positivo, dependiendo de los parámetros:

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

Cuando sort() Al comparar dos valores, la función envía los valores a la función de comparación y ordena estos valores según el valor devuelto (negativo, cero o positivo).

Ejemplo:

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

La función calcula 40-100 y luego devuelve -60 (valor negativo).

La función de ordenamiento colocará 40 antes de 100.

Puede usar el siguiente fragmento de código para probar el orden numérico y alfabético:

<button onclick="myFunction1()">Ordenar por letra</button>
<button onclick="myFunction2()">Ordenar por número</button>
<p id="demo"></p>
<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction1() {
		points.sort();
		document.getElementById("demo").innerHTML  = points;
}
function myFunction2() {
		points.sort(function(a, b){return a - b});
		document.getElementById("demo").innerHTML = points;
}
</script>

Prueba por tu cuenta

ordenar el array en orden aleatorio

Ejemplo

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

Prueba por tu cuenta

Buscar el valor más alto (o más bajo) del array

JavaScript no proporciona una función integrada para encontrar el valor más alto o más bajo de un array.

Sin embargo, después de ordenar el array, puede usar índices para obtener el valor más alto o más bajo.

ordenamiento creciente:

Ejemplo

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// Ahora points[0] contiene el valor más bajo
// Y points[points.length-1] contiene el valor más alto

Prueba por tu cuenta

ordenamiento decreciente:

Ejemplo

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// Ahora points[0] contiene el valor más alto
// Y points[points.length-1] contiene el valor más bajo

Prueba por tu cuenta

Si solo necesita encontrar el valor más alto o más bajo, ordenar todo el array es un método extremadamente ineficiente.

aplicar Math.max() al array

Puede usar Math.max.apply para encontrar el valor más alto del array:

Ejemplo

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

Prueba por tu cuenta

Math.max.apply([1, 2, 3]) igual a Math.max(1, 2, 3).

aplicar Math.min() al array

Puede usar Math.min.apply para encontrar el valor más bajo del array:

Ejemplo

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

Prueba por tu cuenta

Math.min.apply([1, 2, 3]) igual a Math.min(1, 2, 3).

Mis métodos Min / Max de JavaScript

El método más rápido es usar un método "hecho a mano".

Esta función recorre el array, comparando cada valor con el valor más alto encontrado:

ejemplo (buscar Max)

function myArrayMax(arr) {
    var len = arr.length
    var max = -Infinity;
    while (len--) {
        if (arr[len] > max) {
            max = arr[len];
        }
    }
    return max;
}

Prueba por tu cuenta

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

ejemplo (buscar Min)

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

Prueba por tu cuenta

Ordenar arrays de objetos

Los arrays de JavaScript a menudo contienen objetos:

Ejemplo

var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];

Incluso si los objetos tienen propiedades de tipos de datos diferentes,sort() Este método aún se puede usar para ordenar arrays.

La solución es comparar valores de atributos mediante una función de comparación:

Ejemplo

cars.sort(function(a, b){return a.year - b.year});

Prueba por tu cuenta

La comparación de propiedades de cadenas es un poco más compleja:

Ejemplo

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

Prueba por tu cuenta