Maison  >  Article  >  interface Web  >  Analyser l'utilisation et le principe de la méthode de tri en JS

Analyser l'utilisation et le principe de la méthode de tri en JS

零到壹度
零到壹度original
2018-03-20 14:33:453689parcourir

Cet article analyse principalement l'utilisation et le principe de la méthode de tri en JS. Les amis dans le besoin peuvent s'y référer. J'espère que cela pourra aider tout le monde. Jetons un coup d'œil avec l'éditeur ci-dessous.

Native JS propose deux méthodes de réorganisation : reverse() et sort(). Il n'y a rien à dire sur reverse(), il inverse simplement directement le tableau, comme dans l'exemple suivant :

    var arr = [1, 2, 3, 4, 5, -1, -10, 9, 0];
    arr.reverse();
    alert(arr);
    //0, 9, -10, -1, 5, 4, 3, 2, 1
Le résultat de l'opération est l'ordre inverse du tableau, il n'y a rien à dire.

Parlons de la méthode sort() en détail :

La méthode sort peut être appelée directement sans passer de paramètre, ou vous pouvez transmettre une fonction de comparaison en tant que paramètre. parlons de la fonction de comparaison plus tard. Pour expliquer, parlons d'abord du moment où les paramètres ne sont pas transmis.

Lorsqu'aucun paramètre n'est transmis, la méthode sort() appellera la méthode de tri par défaut, c'est-à-dire qu'elle appellera d'abord la méthode de transformation toString() de chaque élément du tableau, puis triera les caractères en fonction de la chaîne. Ordre d'encodage Unicode. Les chaînes sont triées, comme dans l'exemple suivant :

    var arr = [1, 2, 3, 15, 22, 33];
    arr.sort();
    alert(arr);
    //1, 15, 2, 22, 3, 33
Le résultat de sortie peut ne pas être le même que celui imaginé, mais il est trié selon l'ordre de ces nombres dans le jeu de caractères Unicode. .

Alors comment pouvons-nous lui faire trier le tableau selon nos idées ? C'est vrai, vous transmettez simplement une fonction en tant que paramètre pour spécifier la méthode de tri. (Notez que le paramètre doit être une fonction, pas autre chose)

Cette fonction peut être écrite comme suit :

    function cmp (value1, value2) {
        if (value1 < value2) {
            return 1;
        }
        else if (value1 > value2) {
            return -1;
        } else {
            return 0;
        }
    }
Laissez-moi vous expliquer à nouveau cette fonction Si valeur2 est supérieure à valeur1. , alors ce sera le cas. Si 1 est renvoyé, ce qui est vrai, alors l'échange sera effectué, de sorte que la plus grande valeur 2 sera placée à l'avant et la plus petite valeur 1 sera placée à l'arrière. De cette façon, l’ensemble sera trié du plus grand au plus petit. Voici un exemple d'application pratique :

    var arr = [1, 2, 3, 15, 22, 33, 44, 55, 0, -1, 22, 55];
    function cmp (value1, value2) {
        if (value1 < value2) {
            return 1;
        }
        else if (value1 > value2) {
            return -1;
        } else {
            return 0;
        }
    }
    arr.sort(cmp);
    alert(arr);
Résultats d'exécution :


Il existe également une manière simplifiée d'écrire la fonction cmp :

    function cmp (a, b) {
        return b - a;
    }
Cette fonction a le même effet que la fonction ci-dessus lorsque b est relativement grand, elle renverra un nombre supérieur ou égal à 1, c'est-à-dire vrai, de sorte que l'échange sera. effectué, et le résultat global est également un Pour trier par ordre décroissant, vous pouvez essayer d'écrire votre propre code.


Alors, maintenant que les nombres du tableau ont été triés, comment trier en fonction d'une certaine valeur d'attribut dans l'objet tableau ?

Une fonctionnalité des fonctions JS qui doit être utilisée ici est d'utiliser des fonctions comme valeurs de retour. Vous pouvez imbriquer une couche de fonctions pour recevoir les noms d'attributs d'objet, indiquant sur quel attribut trier en fonction :

<script type="text/javascript">
    var arr = [
        { name: &#39;guo&#39;, age: 20},
        { name: &#39;yu&#39;, age: 19},
        { name: &#39;liu&#39;, age: 15}
    ];

    function cmp (property) {
        return function (a, b){
            var value1 = a[property];
            var value2 = b[property];

            return value1 - value2;
        }
    }
    arr.sort(cmp(&#39;age&#39;));
    for (var i=0; i<3; i++) {
        alert(arr[i].name);
    }
    //liu, yu, guo
</script>
Certaines personnes peuvent ne pas comprendre la fonction cmp actuelle, vous pouvez donc déboguer ce code pour voir ce qui se passe :


Vous pouvez voir, La propriété de la fonction cmp ne sert que d'identifiant, mais en fait les données dans arr sont transmises à la fonction interne, puis les paramètres de la fonction interne sont utilisés pour obtenir les valeurs qui doivent être comparées en fonction du propriété.

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