javascript - resueltos - tipos de matrices pdf
Función de comparación personalizada de clasificación de Javascript: clasificación de una matriz ordenada (2)
Tengo una matriz de objetos de la siguiente forma:
arr[0] = { ''item1'' : 1234, ''item2'' : ''a string'' };
Lo ''item1''
primero por ''item1''
que es sencillo. Ahora quiero ordenar arr
(que está ordenado por ''item1''
) de nuevo, pero esta vez por ''item2''
pero solo para los elementos donde ''item1''
es el mismo. La matriz final se vería como:
arr = [
{ ''item1'' : 1234, ''item2'' : ''apple'' },
{ ''item1'' : 1234, ''item2'' : ''banana'' },
{ ''item1'' : 1234, ''item2'' : ''custard'' },
{ ''item1'' : 2156, ''item2'' : ''melon'' },
{ ''item1'' : 4345, ''item2'' : ''asparagus'' }
];
Intenté escribir una función de clasificación para el segundo caso así:
arr.sort(function(a,b){
if(a.item1 === b.item1){
return a.item2 > b.item2 ? 1 : a.item2 < b.item2 : -1 : 0;
}
});
Podría combinar los dos tipos en una función para obtener la matriz ordenada final, pero habrá casos en los que tendré que ordenar solo por ''item1''
o simplemente ''item2''
.
O como simple oneliner para el primer y segundo orden de prioridad, puede expandirlo más como desee, simplemente reemplace el 0 con otra cadena de comparación. Cambie < y > o -1 y 1 para el orden inverso.
someArray.sort(function(a,b) {
return a.item1 > b.item1 ? 1 : a.item1 < b.item1 ? -1 : a.item2 > b.item2 ? 1 : a.item2 < b.item2 ? -1 : 0;
});
Puede tener cuatro funciones de comparación diferentes: una ordenada por artículo1, una por artículo2, una por artículo1, luego artículo2 y una por artículo2 luego artículo1.
P.ej:
arr.sort(function(a,b){
if(a.item1 == b.item1){
return a.item2 > b.item2 ? 1 : a.item2 < b.item2 ? -1 : 0;
}
return a.item1 > b.item1 ? 1 : -1;
});