Maison >interface Web >js tutoriel >Une fonction de comparaison booléenne peut-elle trier correctement un tableau JavaScript ?
Tri en JavaScript : le retour d'un booléen n'est-il pas suffisant pour une fonction de comparaison ?
La manière traditionnelle de trier un tableau en JavaScript est en utilisant la méthode Array.sort(), qui vous permet de spécifier une comparaison personnalisée fonction.
Question :
Pouvons-nous simplement utiliser une fonction de comparaison booléenne (renvoyant vrai/faux) pour trier un tableau, ou devons-nous renvoyer une valeur numérique (par exemple, 1, -1, 0)?
Réponse :
Non, renvoyer un booléen n'est pas suffisant pour une fonction de comparaison en JavaScript. La fonction de comparaison doit renvoyer une valeur numérique indiquant la relation entre les deux éléments comparés :
Raisonnement :
Renvoyer un booléen précise uniquement si un élément est supérieur ou inférieur à l'autre, mais il ne fournit pas suffisamment d'informations pour le algorithme de tri pour déterminer quel élément vient en premier. Par exemple, une fonction de comparaison renvoyant vrai ne précise pas si a est juste supérieur à b ou bien supérieur à b.
Pourquoi la mauvaise solution est répandue :
Le une solution incorrecte consistant à renvoyer un booléen est courante car elle fonctionne dans certains cas, en particulier lors du tri de simples tableaux de nombres. Cependant, cela peut conduire à des résultats inattendus lors du tri de données plus complexes ou lors de l'utilisation d'algorithmes de tri instables (qui modifient l'ordre des éléments égaux).
Fonctions de comparaison correctes :
Pour trier correctement un tableau, utilisez l'une des fonctions de comparaison suivantes :
Fonction de comparaison générique :
function(a, b) { if (a > b) return 1; if (a < b) return -1; /* else */ return 0; }
Fonction de comparaison pour Chiffres :
function(a, b) { return a - b; }
Remarque :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!