0
votes

Trier un tableau de nombres en utilisant .sort, mais je ne sais pas pourquoi cela fonctionne

Question Noob. Donc, je trie un tableau de nombres par ordre croissant, mais je ne comprends pas pourquoi cela fonctionne.

const sortYears = arr => {
  arr = (a, b) => {return a - b;}
}

const years = [1970, 1999, 1951, 1982, 1963, 2011, 2018, 1922];

console.log(years.sort(sortYears()));

Que réalise réellement a - b ? N'est-ce pas simplement renvoyer un autre numéro? Comment est-il soudainement capable de trier ces nombres?


2 commentaires

Ce n'est pas soudain, c'est comme ça que ça doit fonctionner. Découvrez developer.mozilla.org/en- US / docs / Web / JavaScript / Reference /…


Si le résultat est zéro, les éléments sont égaux, si son négatif ou positif détermine s'il est supérieur ou inférieur. Voilà comment ça marche.


3 Réponses :


1
votes

L'effet du nombre produit par a - b ou b - a est par rapport à 0:

  1. b === a - l'ordre des articles respectifs ne changera pas
  2. b - a - déplacer a vers un index inférieur à b
  3. b - a> 0 - déplacer b vers un index inférieur à a

Cependant, la fonction sortYears renvoie undefined , donc elle n'est pas prise en compte. Bien que le tri par défaut soit croissant. Il a été créé en convertissant les éléments en chaînes et en les triant sous forme de chaînes. Fournir une fonction de comparaison garantira qu'ils sont triés sous forme de nombres (notez l'emplacement du nombre 2 en utilisant la comparaison par défaut):

const sortYears = () => (a, b) => a - b;

const years = [1970, 1999, 1951, 1982, 1963, 2011, 2, 2018, 1922];

console.log(years.sort(sortYears())); // with compare function
// [2,1922,1951,1963,1970,1982,1999,2011,2018]

console.log([...years].sort()); // using the default compare
// [1922,1951,1963,1970,1982,1999,2,2011,2018]


2 commentaires

Merci. En fait, je ne voulais pas le taper de cette façon et j'ai édité la question. Mais cela vous aide à comprendre pourquoi ce n'était pas en ordre décroissant, comme je l'ai initialement prévu.


J'ai mis à jour la réponse pour expliquer pourquoi a - b est différent de la comparaison par défaut.



1
votes

Prenez deux ans, disons 1970 et 1963. 1970 - 1963 vous donne un nombre positif. Cela signifie que 1970 va après 1963 dans la liste. 1963 - 1970 vous donne un nombre négatif, donc 1963 précède 1970 dans la liste. C'est la même chose que ceci:

 const sortYears = arr => {
    arr = (a, b) => {
        if(a - b > 0){
            return 1
        }else if (a - b < 0){
            return -1
        }else if(a - b === 0){
            return 0
        }
    }
}


0 commentaires

1
votes

Par défaut, la méthode sort () trie les valeurs sous forme de chaînes par ordre alphabétique et croissant. Pour bien travailler avec les nombres, vous devez fournir une fonction de comparaison pour définir une autre logique d'ordre de tri. La fonction doit renvoyer une valeur négative , zéro ou positive .

Inspection de votre fonction:

const sortYears = () => (a, b) => b - a;
  • négatif: la valeur b est la valeur la plus basse
  • positif: la valeur b est la valeur la plus élevée
  • zéro: les deux valeurs sont égales

J'espère que cela vous aidera.


0 commentaires