Fonction sort() ou reverse() [Résolu]

Signaler
Messages postés
18
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
2 février 2010
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour, j'ai un problème avec la fonction sort().

je cherche à classer par ordre décroissant la colonne [j][3] du tableau ci-dessous. or quoi que je fasse, elle est toujours en 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 4è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

infos supplemantaires :

mes valeurs sont de type décimale (il y en a 1001 :
6.976
90.688
104.63999999999999
118.59199999999998
.....

La 4ème colonne (celle qui est toujours en décroissant) est la seule caclulée en fonction des autres colonnes

Merci pour votre aide

<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][3] + "
");
    
 }
 
u.sort(function(a,b){return a-b})
</script>

14 réponses

Messages postés
18
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
2 février 2010

Ca semble baigner effectivement, j'avais pa vu ton postprécédent

C'est le
for ( var n=0;n<u.length;n++)

{ document.writeln(u[n][0]+"="+u[n][3]+"
"); }

qui change tout

Merci de ton aide précieuses
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Bonjour,
pas tout à fait : tri en caractères pas en valeur

    function trinbr(a,b)
    {    return a-b;    }
    var tri=new Array(2,8.99,4, 99.51,10,8.97,25,99.3, 8.96,24,100,12);
    tri.sort(trinbr);
    for ( var n=0;n<tri.length;n++)
    {    document.write(tri[n]+" ");    }

Cordialement
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
donc pour décroissant :

function trinbr(a,b)
{ return b-a; }
@+
Messages postés
18
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
2 février 2010

excuse moi mais j'ai pas tout compris (je debute).
Comment tu implémentes ça dans mon code

merci
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
oups... j'avais pas vu que tu utilisais déjà
la bonne manière....
u.sort(function(a,b){return a-b})
met donc
u.sort(function(a,b){return b-a})
Messages postés
18
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
2 février 2010

J'ai déja essayer ça change rien
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
beuh...ah ben oui....
u.sort ? alors qu'il y a 3 colonnes,
et que c'est sur la 3ème que tu veux faire ce tri.
là, tu tries sur laquelle ?
Messages postés
18
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
2 février 2010

Sur la première.

j'ai essayé avec
u.sort(function(a,b){return b[0]-a[0];});

Ca ne marche pas non plus
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
t'as essayé sur la 3ème ?
puisque c'est là que tu veux trier.
>>je cherche à classer par ordre décroissant la colonne [j][3]
ou me goure-je ?
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
je ne sais d'ailleurs pas comment ça va réagir
le sort sur un array à "colonnes multiples"
jamais fait, tiens...
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
u.sort(function(a,b){return b[3]-a[3]});
for ( var n=0;n<u.length;n++)
{ document.writeln(u[n][0]+"="+u[n][3]+"
"); }

ça semble baigner....
Messages postés
18
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
2 février 2010

Oui j' ai essayé également sur la 4 ème colonne ([j][3]

mais la fonction n'a aucun effet non plus.


C'est ce que j'explique dans mon premier post : les 3 premières sont
toujours croissante (que ce soi avec a-b ou b-a) et la quatrième est
toujours décroissante.

En fait j'ai besoin de faire varier l'ordre de tri pour trouver le plus petit élément ou le plus grand.

En fait sur la 4ème colonne par exemple ça ne tri même pas du tout comme tu peux le voir sur les premières valeurs


358.5310536720241

121.50563637459994

74.4442380474162

54.45136168426923

43.45668388484724

36.54000252671324

31.81220986327128

28.393336194707885

25.818411960800645

23.818786307767198

22.228500333158202

20.9395554960548

19.87867810385428

18.99442494713452

18.24963312078147

17.616797893748192

17.07513487180893

16.608651783064815

16.204847261685835

15.853811157887039

15.547589002050053

15.27972443696267

15.04492412253261

14.838808540618436

14.65772409092732

14.498599604263324

14.358835503877625

14.236217277013989

14.128847264718756

14.0350904069831

13.95353072769957

13.882936162847962

13.82222992700374

13.77046704563088

13.72681499993623

13.69053766922673

13.660981934999368

13.637566447137308

13.619772156814463

13.607134301121233

13.599235586911288

13.59570037026164

13.596189666442571

13.600396855804625

13.608043975307522

13.618878504905663

13.63267057370803

13.649210523546028

13.668306777929446

13.68978397282798

13.71348131265912

13.739251120587795

13.766957556981684

13.796475483803615

13.827689456006603

13.860492823745897

13.894786931530946

13.930480402385562

13.96748849672896

14.005732537084459

14.045139390908354

14.085641004842323

14.127173984557508

14.169679215099473

14.213101517280364

14.257389336213812

14.302494458561965

14.348371755474956
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
0.01=358.5310536720241

0.03=121.50563637459994

0.05=74.4442380474162

19.989999999999664=63.78412520043727

19.969999999999665=63.73513041952226

19.949999999999665=63.68613121269326

19.929999999999666=63.637127573016684

19.909999999999666=63.588119493541804

19.889999999999667=63.53910696730068

19.869999999999667=63.490089987308124

19.849999999999667=63.441068546561624

19.829999999999668=63.392042638041346

19.80999999999967=63.34301225470991

19.78999999999967=63.29397738951259

19.76999999999967=63.24493803537705.....

semble correct si on trie sur 3
non ?

<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;    
    }     
    u.sort(function(a,b){return b[3]-a[3]});
    for ( var n=0;n
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
Dans un tableau à plusieurs dimensions
lorsque l'on fait un tri seul la première entrée est triée.
faites l'essai
avec ce bout de code
<html>
<head>
<script type= "text/javascript">

//-- la fonction
function Sup(a, b){

  return(( a > b)? -1 :1);
}
//-- l'init

var Tab = new Array();
Tab[0] = [1,10,100,1000];
Tab[1] =
[2,20,200,2000];
Tab[2] = [3,30,300,3000];
Tab[3] = [4,40,400,4000];

//-- le tri
Tab.sort( Sup);
//-- l'affichage
alert( Tab);

</script>
</head>



</html>
si l'on veut trier un tableau particulier il faut
le préciser
exemple essayez avec
Tab[3].sort( Sup);
;O)