Maison >interface Web >js tutoriel >Comment la fonction JavaScript fournie implémente-t-elle le tri naturel d'un tableau de chaînes contenant des nombres ?

Comment la fonction JavaScript fournie implémente-t-elle le tri naturel d'un tableau de chaînes contenant des nombres ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 21:11:03870parcourir

How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?

Tri naturel des éléments d'un tableau (chaîne avec des nombres)

Trier un tableau de chaînes contenant des nombres de manière significative peut être un défi. Les trier lexicographiquement aboutit souvent à un ordre inattendu. Pour obtenir l'ordre de « tri naturel » souhaité, nous pouvons utiliser l'approche suivante :

Solution :

La fonction JavaScript fournie utilise une fonction de comparaison personnalisée appelée naturalCompare. Voici comment cela fonctionne :

  1. Tokeniser les chaînes :

    • Cette fonction tokenise les chaînes d'entrée, en séparant les nombres des caractères. Les jetons sont stockés par paires dans un tableau, où le premier élément est le nombre (ou l'infini s'il n'y a pas de nombre) et le deuxième élément est les caractères non numériques.
  2. Boucle de comparaison :

    • Il entre dans une boucle qui parcourt les jetons des deux chaînes d'entrée.
    • À chaque itération, il compare le premier élément (numéro ) ou le deuxième élément (caractères) des paires de jetons.
    • Si un est supérieur, la fonction renvoie le résultat de la comparaison (positif pour a, négatif pour b). S'ils sont égaux, cela passe à la paire suivante.
  3. Gestion de la longueur inégale des jetons :

    • S'il y a still éléments dans l'un des tableaux de jetons, leur différence de longueur est renvoyée comme résultat de la comparaison.

Exemple :

Voici un exemple d'utilisation de cette approche pour trier le tableau :

<br>function naturalCompare(a, b) {</p>
<pre class="brush:php;toolbar:false">// Tokenization
var ax = [], bx = [];
a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity,  || ""]) });
b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity,  || ""]) });

// Comparison
while(ax.length &amp;&amp; bx.length) {
    var an = ax.shift();
    var bn = bx.shift();
    var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
    if(nn) return nn;
}

// Handling unequal length
return ax.length - bx.length;

}

// Tri tableau de tests
let arr = ["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob dit bonjour"];
arr.sort(naturalCompare);
console.log(arr );

Sortie :

[
"IL0 Foo",
"IL3 Bob dit bonjour",
"IL10 Baz",
"PI0 Bar"
]

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