una tipos resueltos que opuesta matriz matrices ejemplos definicion declarar con columna clasificacion javascript arrays sorting

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; });