2013-04-15 5 views
0

J'ai une fonction que j'utilise pour trier les événements par date:Tri par date puis Lieu

function SortByDateAsc() { 

    return function (a,b) { 

     var aDate = new Date(new Date(a['Month'] +" "+ a['Day']+ " "+ a['Year'])); 
     var bDate = new Date(new Date(b['Month'] +" "+ b['Day']+ " "+ b['Year'])); 

     return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : 0; 

    } 
} 

Si je voulais trier par date puis par emplacement, par exemple, j'ai deux résultats pour la même date, mais ils sont Dans deux endroits différents. Comment ajouter les emplacements à trier par ordre alphabétique?

Donc, mes résultats finaux devraient être les dates plus l'emplacement dans l'ordre alphabétique ??

Répondre

3

Ajouter un contrôle similaire pour l'emplacement avant de retourner 0. En outre, il existe un moyen beaucoup moins compliqué de créer des dates.

function SortByDateAsc() { 
    return function (a,b) { 
    // the month-1 is because Date months are 0-indexed, which 
    // might not be necessary if your months are already 0-indexes 
    var aDate = new Date(a.Year, a.Month-1, a.Day).getTime(); 
    var bDate = new Date(b.Year, b.Month-1, b.Day).getTime(); 

    return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : someLocationComparator(a,b); 
    } 
} 

Bonne lecture sur the Date docs.

+0

Merci :-) cela a fonctionné parfaitement – Jerome

+0

Si votre problème est résolu, auriez-vous l'esprit [accepter la réponse?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

1

La valeur de retour indiquera au système l'ordre que vous voulez.

Si vous voulez trier deux événements de même la date juste ne pas revenir 0 sur la fonction de tri:

function SortByDateAsc() { 
    return function (a,b) { 

     var aDate = new Date(new Date(a['Month'] +" "+ a['Day']+ " "+ a['Year'])); 
     var bDate = new Date(new Date(b['Month'] +" "+ b['Day']+ " "+ b['Year'])); 

     var diff = aDate - bDate; 
     if (diff !== 0) 
      return diff; 

     return (a.location < b.location) ? -1 : (a.location > b.location) ? 1 : 0; 
    } 
}