J'ai un tableau d'objets de la forme suivante:
arr[0] = { 'item1' : 1234, 'item2' : 'a string' };
Je le trie d'abord par 'item1'
qui est simple. Maintenant, je veux trier arr
(qui est trié par 'item1'
) mais cette fois par 'item2'
mais uniquement pour les éléments où 'item1'
est identique. Le tableau final ressemblerait à ceci:
arr = [
{ 'item1' : 1234, 'item2' : 'Apple' },
{ 'item1' : 1234, 'item2' : 'banana' },
{ 'item1' : 1234, 'item2' : 'custard' },
{ 'item1' : 2156, 'item2' : 'melon' },
{ 'item1' : 4345, 'item2' : 'asparagus' }
];
J'ai essayé d'écrire une fonction de tri pour le second cas comme suit:
arr.sort(function(a,b){
if(a.item1 === b.item1){
return a.item2 > b.item2 ? 1 : a.item2 < b.item2 : -1 : 0;
}
});
Je pourrais combiner les deux tris en une seule fonction pour obtenir le tableau final trié, mais il y aura des cas où je devrai trier uniquement 'item1'
ou simplement 'item2'
.
Vous pouvez avoir quatre fonctions de comparaison différentes - une triant par article1, une par article2, une par article1 puis article2 et une par article2 puis article1.
Par exemple.:
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;
});
Vous pouvez également l’étendre à votre guise, en remplaçant le 0 par une autre chaîne de comparaison. Basculez <et> ou -1 et 1 pour l'ordre inverse.
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;
});