2016-02-09 2 views
0

En javascript (ou de nombreuses autres langues), il existe une méthode comme Array.prototype.sort. Il prend un argument qui est une fonction comme le suivant:Quel est un truc pour se souvenir de l'ordre des arguments à une fonction de comparateur?

array.sort(compare) 

Supposons que je veux trier le tableau dans l'ordre croissant. J'ai beaucoup de mal à se rappeler si cette fonction est censé ressembler à ceci:

array.sort(function compare(a,b){ 
    if (a < b){ return -1 } 
    if (a > b){ return 1 } 
    return 0; 
}) 

ou comme celui-ci

array.sort(function compare(a,b){ 
    if (a < b){ return 1 } // NOTE that -1 and 1 are swapped here! 
    if (a > b){ return -1 } 
    return 0; 
}) 

Je suis fatigué de googler tout le temps. Y a-t-il un truc ou un moyen mnémotechnique pour s'en souvenir?

+0

Je le déduis de la comparaison de nombres standard '(a, b) => a-b' quand j'en ai besoin. – Bergi

Répondre

2

La règle: Pour le tri dans l'ordre croissant, si le premier paramètre de la fonction de comparaison est plus grand, le retour 1.

Les mots clés sont « ascendante », « premier », « plus » et "1". Dans chaque cas, pensez à ce qui est "meilleur":

  • "Croissant" est mieux.Pensez à "gravir les échelons" et "relever le défi".
  • "Premier" est meilleur.Pensez "première ligne" et "première place".
  • "Plus grand" est meilleur.Ce cliché existe déjà. Dit Nuff.
  • "Positif" est meilleur.Pensez "attitudes positives" et "résultats positifs". (Sinon, "plus" est également mieux penser "c'est un gros plus.".)

Ensuite, vous pouvez penser à ce qui suit comme vous écrivez votre code:

var array = [3,2,1,2]; 
 

 
document.write('unsorted array: ' + array + '</br>'); 
 

 
var POSITIVE = 1; 
 
var SAME  = 0; 
 
var NEGATIVE = -1; 
 

 
array.sort(function compare(firstParam, secondParam) { 
 

 
    var theyAreTheSame = (firstParam === secondParam); 
 
    // that shouldn't require any memory aid 
 

 
    var firstIsBigger = (firstParam > secondParam); 
 

 
    if  (theyAreTheSame) return SAME 
 
    else if (firstIsBigger) return POSITIVE // the key line 
 
    else      return NEGATIVE; 
 

 
}); 
 

 
document.write('sorted array: ' + array);

Cela conduit à ce qui suit:

  • pour trier dans le meilleur ordre (le croissant un) ...
  • ... si le meilleur paramètre (c.-à-d. le premier) ...
  • ... est la meilleure taille relative (c'est-à-dire plus grande) ...
  • ... alors la meilleure valeur (c'est-à-dire la valeur positive) devrait être renvoyée par la fonction de comparaison.

(Avertissement: Je ne prétends pas sur l'utilité de cette aide mémoire pour les autres langues ou même d'autres fonctions, mais, bon, je l'espère, il aide quelqu'un avec sorte de tableau de Javascript)

Mise à jour: Correction du code en remplaçant 'let' et 'const' par 'var' (ierevenir de ES6 à ES5 pour les déclarations de variables) afin que le code fonctionne non seulement dans Firefox mais aussi dans Chrome et Safari. (Je n'ai pas vérifié Internet Explorer ou d'autres navigateurs.)