Este artículo describe cómo JS usa array.prototype.sort () para clasificar los objetos de matriz. Compártelo para su referencia. El análisis específico es el siguiente:
Al hablar sobre la clasificación de los objetos de matriz, primero entendamos brevemente array.prototype.sort (). El método de clasificación acepta una función de parámetro. La función proporcionará dos parámetros, respectivamente, dos elementos que se comparan. Si el elemento es cadena, se comparará a través del código Unicode. Si es número, se compara el tamaño del valor. Si se devuelve 1 en la función comparada, se intercambiarán dos elementos, y 0 y -1 no se intercambiarán. Echemos un vistazo a un ejemplo:
La copia del código es la siguiente: var arr = [3, 5, 2, 1];
// clasificación de pequeño a grande
arr.sort (función (a, b) {
devolver a> b? 1: -1;
});
// El resultado es: [1, 2, 3, 5]
Entonces, de vuelta a nuestro tema, ¿cómo debo escribirlo si ordeno un objeto de matriz? De hecho, el principio es el mismo que el anterior, como:
Copie el código de la siguiente manera: var arr = [
{A: 2, B: 3.2},
{A: 3, B: 1.2},
{A: 4, B: 2.2},
{A: 6, B: 1.2},
{A: 5, B: 3.2}
]
/// ordenado por el atributo B de pequeño a grande
arr.sort (function (x, y) {
regresar xb> yb? 1: -1;
});
x e y son un elemento de arr, es decir, un objeto, por lo que puede comparar directamente las propiedades de los dos objetos.
En el ejemplo anterior, hay duplicaciones en el elemento más pequeño. Si el requisito es: Primero de pequeño a grande según el atributo B, y si hay duplicaciones en el más pequeño, entonces ordene por el atributo A, ¿cómo debo escribirlo?
Al clasificar, primero ordene por el atributo B. Si XB es mayor que yb, mueva X a la derecha de y. Si XB es igual a yb, compare con Xa y YA. Por lo tanto, el código es el siguiente:
Copie el código de la siguiente manera: arr.sort (function (x, y) {
if (xb> yb) {
regresar 1;
} else if (xb === yb) {
regresar xa> ya? 1: -1;
} else if (xb <yb) {
regreso -1;
}
})
Espero que este artículo sea útil para la programación de JavaScript de todos.