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 :

fonction sort() et reverse()


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 324
    Points : 114
    Points
    114
    Par défaut fonction sort() et reverse()
    Bonjour, j'ai un problème avec la fonction sort().

    je cherche à classer par ordre décroissant la colonne [j][0] du tableau ci-dessous. or quoi que je fasse, elle est toujours en ordre croissant


    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
     
    <script type='text/javascript'>
     
    var column_lengh=150;
    var column_dead_volume=1744;
    var dm=1.18917640398834*Math.pow(10,-9);
    var particul_diameter=5;
     
    var u = new Array();
    var j=0; 
    for (i=0.01; i<=20; i+=0.02)
    {
      j++;
      	u[j]= new Array();
      	u[j][0]=i;
      	u[j][1]=column_dead_volume*i/column_lengh*60;
      	u[j][2]=(i*particul_diameter*0.000000001)/dm;
    	u[j][3]=(Math.pow(u[j][2],0.33)*1+3/u[j][2]+0.1*u[j][2])*particul_diameter;
     
    document.write("Ligne " + u[j][0] + "<br>");
     
     }
    u.sort()
    u.reverse()

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 324
    Points : 114
    Points
    114
    Par défaut
    petit détail supplémentaire, j'ai 1001 éléments dans ma colonne

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    tu fait un sort , pui un reverse :-/

    essaye un sort(function(a,b){return a - b})

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 324
    Points : 114
    Points
    114
    Par défaut
    j'ai essayé mais ca ne change rien (toujours par ordre croissant)
    Ce qui est bizarre c'est quand je les fait 3 premières colonnes l'ordre est toujours croissant, quand je le fait sur la 3ème colonne, il est décroissant.

    j'ai également essayer en changeant a-b par b-a dans la fonction et ca ne change rien


    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
    <script type='text/javascript'>
     
    var column_lengh=150;
    var column_dead_volume=1744;
    var dm=1.18917640398834*Math.pow(10,-9);
    var particul_diameter=5;
     
     
     
    // creation d'un tableau indice avec les valeur u[j][0] qui demarre à 0.01 incrementé par 0.02 jusqu'à 20, u[j][1] correspond à F(µL/min) dans le tableau excel
    //u[j][2]correspond à nu dans le tableau excel-u[j][3] correpond à H (µm
     
    var u = new Array();
    var j=0; 
    for (i=0.01; i<=20; i+=0.02)
    {
      j++;
      	u[j]= new Array();
      	u[j][0]=i;
      	u[j][1]=column_dead_volume*i/column_lengh*60;
      	u[j][2]=(i*particul_diameter*0.000000001)/dm;
    	u[j][3]=(Math.pow(u[j][2],0.33)*1+3/u[j][2]+0.1*u[j][2])*particul_diameter;
     
    	document.write("Ligne " + u[j][0] + "<br>");
     
     }
     
    u.sort(function(a,b){return a-b})
     
     
     
    </script>

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 324
    Points : 114
    Points
    114
    Par défaut
    infos supplemantaires :

    mes valeurs sont de type décimale :
    6.976
    90.688
    104.63999999999999
    118.59199999999998
    .....

    Et la 4ème colonne (celle qui est toujours en décroissant, non pas la 3ème comme spécifié par erreur dans mon message precedent) est la seule cacluléeen fonction des d'autres colonnes

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    je crois qu'il faut faire une fonction sort, en fonction du type des valeurs ( justement avec a et b ) donc je ne comprend pas pkoi ça ne marche pas :-/

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    Ton tableau est un tableau à 2 dimensions, autrement dit une "matrice".
    Si j'ai bien compris, tu essaies de trier ta matrice selon la valeur de ta première colonne ?

    Lorsque tu appelles la fonction sort() sur ton tableau, ton "comparator" doit prendre en compte le type de variable à trier.

    Ici, ta variable "u" est un tableau de tableau, donc lorsque tu itères sur ton tableau u, chaque enregistrement est lui-même un tableau. Dans ta fonction de comparaison, les variables a et b sont des Array, visiblement, tu souhaites trier sur la première valeur de ces tableaux, modifie donc ta fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    u.sort(function(a,b){return b[0]-a[0];});
    Ton tableau doit être trié cette fois-ci dans l'ordre décroissant.

    A+

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 324
    Points : 114
    Points
    114
    Par défaut
    Ca change rien, c'est toujours croissant


    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
    <script type='text/javascript'>
     
    var column_lengh=150;
    var column_dead_volume=1744;
    var dm=1.18917640398834*Math.pow(10,-9);
    var particul_diameter=5;
     
    var u = new Array();
    var j=0; 
    for (i=0.01; i<=20; i+=0.02)
    {
      j++;
      	u[j]= new Array();
      	u[j][0]=i;
      	u[j][1]=column_dead_volume*i/column_lengh*60;
      	u[j][2]=(i*particul_diameter*0.000000001)/dm;
    	u[j][3]=(Math.pow(u[j][2],0.33)*1+3/u[j][2]+0.1*u[j][2])*particul_diameter;
     
    	document.write(u[j][0] + "<br>");
     
     }
     
    u.sort(function(a,b){return b[0]-a[0];});
     
     
    </script>

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Hmmm, comment le vois-tu que c'est toujours croissant ? par rapport à l'affichage sur la page ?

    Ton script se déroule de la façon suivante :
    - Création du tableau
    - Itération du tableau
    - Remplissage de la ligne
    - Affichage de la ligne

    - Tri du tableau

    Donc effectivement, l'affichage te montre ton tableau de façon croissante, puisque c'est dans cet ordre qu'il est rempli, le tri du tableau n'est fait qu'après l'affichage...
    Si tu parcours de nouveau ton tableau pour afficher les valeurs après le tri, tu auras un tableau trié de façon décroissante.

    Toutefois, ton tableau n'a pas de valeur à l'indice 0 (tu incrémentes j à la première itération avant de remplir le tableau, donc tu passes directement à 1), il est préférable d'incrémenter j à la fin du "remplissage".

    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
     
    <script type='text/javascript'>
     
    var column_lengh=150;
    var column_dead_volume=1744;
    var dm=1.18917640398834*Math.pow(10,-9);
    var particul_diameter=5;
     
    var u = new Array();
    var j=0; 
    for (i=0.01; i<=20; i+=0.02)
    {
      	u[j]= new Array();
      	u[j][0]=i;
      	u[j][1]=column_dead_volume*i/column_lengh*60;
      	u[j][2]=(i*particul_diameter*0.000000001)/dm;
    	u[j][3]=(Math.pow(u[j][2],0.33)*1+3/u[j][2]+0.1*u[j][2])*particul_diameter;
     
    	document.write(u[j][0] + "<br>");
    	j++;
     }
     
    u.sort(function(a,b){return b[0]-a[0];});
     
    document.write("<br>Après tri :<br>");
     
    for (i=0;i<u.length;i++)
    	document.write(u[i][0] + "<br>");
     
    </script>

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 324
    Points : 114
    Points
    114
    Par défaut
    Super BaBeuH effectivement ca marche nickel.
    Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [STL] Débutant : problème utilisation fonction Sort
    Par marcootz dans le forum SL & STL
    Réponses: 5
    Dernier message: 29/08/2007, 20h19
  2. Paramètrer la fonction sort()...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2007, 12h28
  3. [STL]vector de type composé et fonction sort
    Par LordBob dans le forum SL & STL
    Réponses: 14
    Dernier message: 21/03/2007, 11h56
  4. [VBA-E]Fonction "Sort" et format
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/01/2007, 14h29
  5. Probleme fonction sort d'unt list STL
    Par Brouzouf dans le forum Visual C++
    Réponses: 4
    Dernier message: 27/07/2006, 16h54

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