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 :

Sort Array Multidimentionnel par Key numerique en DESC


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut Sort Array Multidimentionnel par Key numerique en DESC
    Salut la communauté, je galère sur un truc tous bête.
    J'ai un tableau js monté de tel maniere :
    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
     
    var aElemPos = [];
      $('.elem').each(function(){
        var sIdElem = $(this).attr("id");
        var xIdElem = sIdElem.split("_");
        var iIdElem = parseInt(xIdElem[3]);
        if(iIdElem<20000) { var sElemFrom = "header"; }else if(iIdElem>30000) { var sElemFrom = "content"; }else{ return true; }
        var iPgN    = parseInt(xIdElem[1]);
        var iPzT    = $(this).position().top;
        var iPzL    = $(this).position().left;
        if(typeof aElemPos[sElemFrom] == "undefined") { aElemPos[sElemFrom] = []; }
        if(typeof aElemPos[sElemFrom][iPgN] == "undefined") { aElemPos[sElemFrom][iPgN] = []; }
        if(typeof aElemPos[sElemFrom][iPgN][iPzT] == "undefined") { aElemPos[sElemFrom][iPgN][iPzT] = []; }
        if(typeof aElemPos[sElemFrom][iPgN][iPzT][iPzL] == "undefined") { aElemPos[sElemFrom][iPgN][iPzT][iPzL] = []; }
        aElemPos[sElemFrom][iPgN][iPzT][iPzL] = sIdElem;
      });
    Je remarque que le tableau (clef numerique ou alpha) est trier automatiquement en ASC (meme si c'est dans le désordre, il me le réordonne tous seul)
    Loop de sortie visuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(var i in aElemPos) {                            // header or content
        for(var j in aElemPos[i]) {                       // page
          for(var k in aElemPos[i][j]) {                  // top
            for(var l in aElemPos[i][j][k]) {             // left
              console.log(i+" | Page "+j+" | Top "+k+" | Left "+l);
            }
          }
        }
      }
    Sortie en console log :
    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
     
    content | Page 1 | Top 200 | Left 200
    content | Page 1 | Top 200 | Left 560
    content | Page 1 | Top 260 | Left 200
    content | Page 2 | Top 188 | Left 188
    content | Page 2 | Top 360 | Left 188
    header | Page 1 | Top 0 | Left 0
    header | Page 1 | Top 0 | Left 580
    header | Page 1 | Top 60 | Left 400
    header | Page 1 | Top 140 | Left 0
    header | Page 1 | Top 180 | Left 0
    header | Page 2 | Top 0 | Left 0
    header | Page 2 | Top 0 | Left 580
    header | Page 2 | Top 60 | Left 400
    header | Page 2 | Top 140 | Left 0
    header | Page 2 | Top 180 | Left 0
    Au départ ce n'est pas dans cette ordre mais il me le trie niquel a chaque niveau en ASC.

    Ma question : Comment faire pour inversé totalement le tableau ? Ou au pire, comment le parcourir en arriere pour que, exemple, la première sortie soit "header | Page 2 | Top 180 | Left 0" (la derniere de la sortie si dessus).

    Merci les gars si vous avez une idée.

    Georges.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par dembroski Voir le message
    Je remarque que le tableau (clef numerique ou alpha) est trier automatiquement en ASC (meme si c'est dans le désordre, il me le réordonne tous seul)
    Qu'est-ce qui trie automatiquement ? Qui est "il" ? Les tableaux ne se trient pas par magie, si c'est le cas ça veut dire qu'il y a une fonction de tri quelque-part et donc que tu peux la modifier pour obtenir l'ordre désiré.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut
    Non, il n'y a aucune fonction de trie. En gros (apres test) quand une clé est numérique (1,2,334, etc... ou "1","2","334",etc), Javascript re classe le tableau en ASC tous seul contrairement si je met "banane","courgette","abricot".
    abricot ne passera pas en premier alors que si je fais un tableau avec 1,0,2 si je boucle dessus et console.log, il mettra 0,1,2.

    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
     
    var aTest = [];
    aTest["banane"] = [];
    aTest["courgette"] = [];
    aTest["abricot"] = [];
     
    var aTest2 = [];
    aTest2 ["0"] = [];
    aTest2 ["2"] = [];
    aTest2 ["1"] = [];
     
    for(var i in aTest) {
    console.log(i);
    }
     
    for(var i in aTest2) {
    console.log(i);
    }
     
    //affiche
    banane
    courgette
    abricot
     
    0
    1
    2
    Tu vois le truc . En gros il classe automatiquement sur les nombres mais pas sur les chaines

    Et j'aimerais savoir : Comment faire afficher =>

    abricot
    banane
    courgette

    puis :

    2
    1
    0

    En gros, trier(sort) les chaines, puis trier(sort) a l'envers(desc).

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Javascript re classe le tableau en ASC tous seul
    Non. JavaScript n'est pas une IA avec son petit caractère qui fait des choses sans qu'on lui demande.

    Tu utilises des Array. Les arrays sont des listes ordonnées avec des index numériques, [0] est le premier, [1] est le suivant etc... Il n'y a pas de tri automatique, c'est toi qui définit l'ordre.

    Tu peux mettre des propriétés en chaînes de caractères dans une Array, comme pour n'importe quel objet en JavaScript, car les Array sont des objets. Mais elles ne seront pas récupérées dans les moyens conventionnels pour parcourir l'array (qui est for(var i=0; i<array.length; i++) ou array.forEach(function(item){ }). Il ne faut pas utiliser for.. in pour parcourir une Array.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut
    "for", "for in", "each"... C'est qu'une loop, ça reviens au même, ça tourne dans l'ordre de l'array. (Enfin bref, c'est pas le soucis ca )

    Comme tu la bien dis, Quand les clés sont numérique, il ordonne logiquement, indépendamment de l'ordre dans lequel je remplis le tableau. On est OK.
    Pour les chaines, ça garde l'ordre dans lequel je les push. Jusque la OK.

    Mais mon probleme c'est toujours le meme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      var aTest = [];
      aTest["banane"] = [];
      aTest["courgette"] = [];
      aTest["abricot"] = [];
     
      var aTest2 = [];
      aTest2 ["0"] = [];
      aTest2 ["2"] = [];
      aTest2 ["1"] = [];
    Comment faire pour ordonner aTest pour qu'il affiche les clés dans l'ordre ASC ou DESC lorsque je loop dessus. Idem pour aTest2.

    Merci.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut
    Pour l'info :
    Te voyant deja dire, non ce n'est pas pareil les loop... Je sais ^^ J'utilise "for in" car je n'ai pas besoins de loopé sur les keys que je n'ai pas push

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Soit tu utilises des Array [], ce qui implique abandonner tes clés en String et les parcourir proprement sans for..in (qui n'est pas prévu pour ça et pose plein de problèmes);
    soit tu utilises des objets {}, qui n'ont pas de notion d'ordre, ce qui implique que tu codes ta propre fonction de parcours de ces objets (quelque-chose du style Object.keys(obj).sort(...).forEach(...))

    Mais si tu persistes à vouloir utiliser un mélange de ces deux notions, tu n'arriveras à rien.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut
    Merci quand même pour ton temps. J'abdique.

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

Discussions similaires

  1. Sort array javascript (par un autre)
    Par lokomass dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/09/2014, 15h48
  2. [MySQL] classer par ordre numérique
    Par july dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/05/2006, 09h43
  3. [vbscript] sort array
    Par totoche dans le forum ASP
    Réponses: 6
    Dernier message: 23/05/2005, 21h59
  4. sorte de valeur par defaut
    Par sampq dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2003, 11h59

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