Maison >interface Web >js tutoriel >Une fonction de comparaison booléenne peut-elle trier correctement un tableau JavaScript ?

Une fonction de comparaison booléenne peut-elle trier correctement un tableau JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-18 00:12:13945parcourir

Can a Boolean Comparison Function Properly Sort a JavaScript Array?

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 :

  • 1 si a est supérieur à b
  • -1 si a est inférieur à b
  • 0 si a est égal à b

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 :

  • Tri lexicographique (pas de comparaison Fonction) : Pour un tri lexicographique simple, ne fournissez pas de fonction de comparaison. Les éléments seront stringifiés et triés en conséquence.
  • 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 :

  • Assurez-vous toujours que votre fonction de comparaison est cohérente et suit les règles de transitivité pour éviter un comportement de tri inattendu.
  • Pour trier les types composites, modifiez le fonction de comparaison pour comparer les propriétés souhaitées ou utiliser une fonction personnalisée qui renvoie une valeur triable.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn