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?
3 Réponses :
L'effet du nombre produit par a - b ou b - a est par rapport à 0:
b === a - l'ordre des articles respectifs ne changera pas b - a - déplacer a vers un index inférieur à b 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]
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.
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
}
}
}
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;
J'espère que cela vous aidera.
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.