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 de données


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 14
    Points
    14
    Par défaut Tri de données
    Bonjour à tous,

    J'ai dans une page PHP un tableau dans lequel figure des données de temps (par exemple: 10min, 4jour, 2heures).

    Actuellement mon tri s'effectue en JS mais me donne des résultats illogiques :

    10min>4jours>2heures
    Savez-vous comment effectuez un tri pour que la fonction prenne en compte également la partie min/jour/heure ?

    Merci d'avance !

    TipX

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 679
    Points
    44 679
    Par défaut
    Bonsoir,
    le résultat du tri n'a rien d'illogique attendu qu'il s'agit de trier des chaines de caractère.
    - Comment effectues tu le tri actuellement ?
    - Comment se présente tes données, toujours du même style ?

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Hello,

    Oui tu as raison le tri n'est pas illogique il ne correspond juste pas à ce que j'attend.

    Mes données se présente toujours de la même façon (xx days, hours ou min).

    Actuellement j'utlise un petit script récupéré sur une autre appli mais qui n'effectue un tri que sur les chiffres.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    a toi de faire une fonction qui retourne le bon tri ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function timeSort(a, b)
    {
    a =1*a.substr(0,2)
    b=1*b.substr(0,2)
       if(a > b)
          return 1
       if(a < b)
          return -1
       return 0
    } 
     
    tonArray.sort(timeSort)

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 679
    Points
    44 679
    Par défaut
    Savez-vous comment effectuez un tri pour que la fonction prenne en compte également la partie min/jour/heure ?
    il te faut d'abord décomposer la partie gauche, les chiffres, de la droite les lettres.
    Une petite expression régulière peut être , et ensuite faire le tri sur les deux parties.

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Oui j'avais plus ou moins saisi la manière de procéder.

    Je suis encore loin d'être à l'aide en php, je vais essayer de voir comment fonctionne ces expressions régulières, je reviens certainement vers vous bientôt!

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a =1*a.match(/^\d{1,2}/)
    b=1*b.match(/^\d{1,2}/)

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Pourrais tu un peu expliquer ton code SpaceFrog?

    Le "d" sert à tester la présence du mot "days" je suppose ? Quand est-t'il du "{1,2}" derrière ?

    Je dois avoir donc mon cas ?
    a=1*a.match(/^\d{1,2}/)
    b=1*b.match(/^\h{1,2}/)
    c=1*b.match(/^\m{1,2}/)

    Comment m'en servir par la suite ?...

    J'ai commencer à regarder de mon côté et je parvenais à tester la présence d'un mot dans ma var. Je pensais donc ensuite trier les minutes en premier, les placer dans mon tableau, puis les hours etc...

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    pas du tout
    ^début de chaine
    \d = caractère numérique
    {1,2} = une ou deux fois

    pour ce qui est est du comment t'en servir par la suite ... je pense quze tu as zappé mon premier post ...

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 679
    Points
    44 679
    Par défaut
    si il te faut une méthode pour également trier suivant les critères days, hours, mn, la solution proposé par SpaceFrog n'est pas suffisante , elle n'opére qu'un tri sur les nombres.

    Je te mets une approche en utilisant une clé de tri générée par les données
    Code : 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
    27
    28
    29
    30
    31
    32
    33
    // tableau donnees resultats
    var data = [];
    // les multiplicateurs
    var multi = {
      'days'  : 60*24,
      'hours' : 60,
      'mn'    : 1
    };
    // chaine de test
    var chaine = '2hours,10mn,4days,15mn,13days,4hours';
    // insertion d'une virgule entre le nombre et l'unite
    chaine = chaine.replace(/([d||h||m])/g, ",$1");
    // recup sous forme tableau
    var tab = chaine.split(',');
    // c'est parti
    var i, k, nb;
    for( i = k = 0, nb = tab.length; i < nb; k++){
      data[k] = {};
      data[k].valeur = tab[i++];
      data[k].unite  = tab[i++];
      // calcul cle de tri en minute suivant unite
      data[k].time = data[k].valeur * multi[data[k].unite];
    }
    // tri du tableau ordre croissant
    data.sort( function( a, b){
      if( a.time > b.time) return 1;
      if( a.time < b.time) return -1;
      return 0;
    });
    // affichage pour voir
    for( i in data){
      document.write( data[i].valeur, data[i].unite, '-> clé de tri = ', data[i].time , '<br>');
    }

  11. #11
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Merci je n'ai pas eu le temps de travailler la dessus, mais je regarde ça demain ,)

Discussions similaires

  1. Tri de données dans un tableau
    Par GESCOM2000 dans le forum Contribuez
    Réponses: 6
    Dernier message: 06/12/2006, 15h55
  2. tri des données différent entre 2 bases
    Par j6m dans le forum Oracle
    Réponses: 2
    Dernier message: 12/03/2006, 10h17
  3. gestion et tri de donnée en mémoire
    Par lenectar dans le forum C++
    Réponses: 2
    Dernier message: 05/10/2005, 13h18
  4. [JTable] Tri des données
    Par soulhouf dans le forum Composants
    Réponses: 7
    Dernier message: 08/09/2005, 14h01
  5. [CR9] Tri de données
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 24/07/2003, 09h30

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