IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Tri par ordre croissant


Sujet :

JavaScript

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut Tri par ordre croissant
    Bonjour

    Je dispose d'un tableau d'id (ce sont donc des strings). Tous les id sont de la forme tddynDay_s"un chiffre"_. Par exemple, tddynDay_s2_ , tddynDay_s45_ , tddynDay_s37_ , tddynDay_s12_ , tddynDay_s8_ .

    J'aurai voulu savoir, comment je dois m'y prendre si je veux trier tout cela par ordre croissant du chiffre qui se trouve derrière le s

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,


    en utilisant une expression régulière, parseInt et méthode sort()

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    var tab = new Array("tddynDay_s2_" , "tddynDay_s45_" , "tddynDay_s37_" , "tddynDay_s12_" , "tddynDay_s8_");
     
    function tri(a, b)
    {
     var n, m;
     var rexp = /\d+/gi;
     
    // extraction des chiffres et conversion en entier
     n = parseInt(a.match(rexp));    
     m = parseInt(b.match(rexp));
     
     if (n<m)
        return -1;
     if (n==m)
        return 0;
     if (n>m)
        return 1;
    }
     
     
    tab.sort(tri);
    alert(tab);

    pour un tri par ordre décroissant, inverse les signes dans les conditions.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Merci Auteur mais je dois dire que là, je comprends pas trop l'appel a la fonction

    (et pourtant j'ai testé, ça marche ...)

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    J'ai compris la différence entre ce que tu as donné et mon code

    Dans le code de Auteur, les chaines a trier sont les elements d'un tableau.
    Moi je récupère ceci

    var cases = document.getElementsByTagName("td");

    Ce sont les id de tous les td (qui sont sous la forme décrite plus haut) que je voudrais trier par ordre croissant

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bon je ne m'en sors pas avec ce problème. L'algo donné par Auteur est bon mais mon souci est que dans l'intitulé de mon pb, je n'ai pas été très exact

    Je dispose d'un tableau d'id (ce sont donc des strings). Tous les id sont de la forme tddynDay_"un chiffre"_s"un autre chiffre"_. Par exemple, tddynDay_4_s2_ , tddynDay_8_s45_ , tddynDay_30_s37_ , tddynDay_24_s12_ , tddynDay_13_s8_ .

    J'aurai voulu savoir, comment je dois m'y prendre si je veux trier tout cela par ordre croissant du chiffre qui se trouve derrière le s

    En plus de cela, ce nombre (celui que je dois trier et qui se trouve derrière le s) va jusque 52. Lorsque j'arrive a 52, il faudrait qu'il revienne a 1 et qu'il continue son incrémentation car ce nombre ne part pas de 1 mais par d'une certaine valeur donnée auparavant (disons 10).

    (La méthode de Auteur trie sur le premier chiffre. Il ne pouvait pas le savoir vu que je l'avais pas dit)

    Merci beaucoup pour votre aide.

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Je dispose d'un tableau d'id (ce sont donc des strings). Tous les id sont de la forme tddynDay_"un chiffre"_s"un autre chiffre"_. Par exemple, tddynDay_4_s2_ , tddynDay_8_s45_ , tddynDay_30_s37_ , tddynDay_24_s12_ , tddynDay_13_s8_ .

    J'aurai voulu savoir, comment je dois m'y prendre si je veux trier tout cela par ordre croissant du chiffre qui se trouve derrière le s
    exemple :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    var tab = new Array("tddynDay_2_s2_" , "tddynDay_51_s45_" , "tddynDay_3_s37_" , "tddynDay_3_s12_" , "tddynDay_559_s8_");
     
    function tri(a, b)
    {
     var n, m;
     var rexp1 = /s\d+/gi;
     var rexp2 = /\d+/gi;
     
     n = a.match(rexp1).toString();
     m = b.match(rexp1).toString();
     
     n = parseInt(n.match(rexp2));
     m = parseInt(m.match(rexp2));
     
     
     if (n<m)
        return -1;
     if (n==m)
        return 0;
     if (n>m)
        return 1;
    }
     
    tab.sort(tri);
    alert(tab);



    Citation Envoyé par identifiant_bidon Voir le message
    En plus de cela, ce nombre (celui que je dois trier et qui se trouve derrière le s) va jusque 52. Lorsque j'arrive a 52, il faudrait qu'il revienne a 1 et qu'il continue son incrémentation
    Ce n'est pas à la fonction de tri de gérer ça, mais à la fonction qui distribue les id.

Discussions similaires

  1. codage d'un tri par ordre croissant
    Par babou466 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/03/2009, 10h48
  2. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19
  3. Analyse croisée : empêcher le tri par ordre croissant
    Par mouaa dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 19/02/2008, 14h08
  4. Tri par ordre croissant
    Par controle55 dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2008, 21h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo