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 objet Javascript


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut Tri objet Javascript
    Bonjour à tous,

    J'utilise la fonction sort() pour trier un tableau, mais celle ci ne semble pas fonctionner avec les objets...

    J'ai un objet que je construit comme un tableau, et j'aimerais trier cette objet de la même manière qu'avec la fonction sort().

    Si quelqu'un à une technique...

    Merci d'avance!

  2. #2
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,

    S'il y a tri, il y a indice. Or, un objet n'a pas d'indice, on ne peut donc pas trier ses propriétés et méthodes.

    Je ne sais pas ce que tu as à faire exactement, je ne sais donc pas si ce que je vais proposer peut convenir. Une solution serait de parcourir toutes les propriétés d'un objet dans une boucle for... in pour insérer le nom de la propriété (toString) dans un tableau pour finalement faire un sort.

  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
    Effectivement , tu peux trier une collection d'objets, mais trier un objet tu ne peux pas ...
    tu peux utiliser une méthode pour trier ses propriété, mais sans voir ton code ou ton objet on ne peux pas faire grand chose de plus ...

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut
    Merci de vos réponses rapides.

    Enfaite je créé un objet comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    monObj = new object();
     
    monObj [0] = new Object();
    monObj [10] = new Object();
    monObj [5] = new Object();
    monObj [25] = new Object();
    Et j'aimerais pouvoir ranger les clés dans l'ordre, comme avec sort().

    Je pensais qu'il existait une fonction pour ceci.

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    monObj = new object();
     
    monObj [0] = new Object();
    monObj [10] = new Object();
    monObj [5] = new Object();
    monObj [25] = new Object();

    tu créer un objet non typé :

    monObj = new object();

    puis tu t'en sert comme tableau ...

    créer directement un tableau :


  6. #6
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut
    Oui bien sûr, seulement dans mon cas je suis obligé de créer un objet.

    C'est pour passer en JSON, et au début avec un tableau ça ne fonctionnais pas.

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut
    Plus personne ne peux m'aider?

    Je ne vois réellement pas comment faire!

    J'ai tenté avec un for in, mais ça n'a rien fais de bon

  8. #8
    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 ne comprend pas comment tu veux trier :-/

    tu ne peux pas trier un objet , tu dois trier un tableau ...

    et si tu souhaites trier un tableau d'objet il faut le faire sur un champs particulier , et au final , utiliser une méthode de trie extérieur ... ou avec un sort(a,b) ...

    en l'occurrence tu ne peux pas trier un objet.

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut
    Ok ok, donc le seul moyen serait de transformer mon objet en tableau pour le trier avec sort et ensuite retransformer ce tableau en objet?

  10. #10
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut passer un tableau d'objets avec une notation json
    Citation Envoyé par Subshadow Voir le message
    Plus personne ne peux m'aider?
    Doucement, doucement, on a une vie professionnelle , nous aussi.
    Citation Envoyé par Subshadow Voir le message
    Oui bien sûr, seulement dans mon cas je suis obligé de créer un objet.
    C'est pour passer en JSON, et au début avec un tableau ça ne fonctionnais pas.
    Je ne comprends pas ce que tu dis. On peut très bien passer un tableau d'objet en json :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <title>passer un tableau d objets avec une notation json</title>
       <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
       <style type="text/css">
       </style>
    </head>
    <body>
      <div id="json"></div>
      <script type="text/javascript">
      var FC = {
        Ajax: {
          requete: function() {
            if(window.XMLHttpRequest) { return new XMLHttpRequest(); }
            else if(window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
            else { return false; }
          }(),
          obtenir: function(typeDeReponse, source, fonction) {
            var requete = FC.Ajax.requete;
            if(!requete) { return false; }
            requete.onreadystatechange = function() {
              if(requete.readyState===4 && requete.status===200) {
                if(fonction) {
                  if(typeDeReponse==="xml") { 
                    fonction(FC.DOM.nettoyerDocument(requete.responseXML.documentElement)); 
                  } else { fonction(requete.responseText); }
                }
              }
            }
            requete.open("GET", source, true);
            requete.send(null);
          }
        },
        DOM: {
          nettoyerDocument: function(xmldoc) {
            var elements = xmldoc.getElementsByTagName("*");
            for(var i=0, imax=elements.length; i<imax; i++){
              var frerePrecedent = elements[i].previousSibling;
              var frereSuivant = elements[i].nextSibling;
              if(frerePrecedent && frerePrecedent.nodeType===3) { FC.DOM.nettoyerNoeud(frerePrecedent); }
              if(frereSuivant && frereSuivant.nodeType===3) { FC.DOM.nettoyerNoeud(frereSuivant); }
            }
            return xmldoc;
          },
          nettoyerNoeud: function(element) {
            if(!element.data.replace(/\s/g,'')) { element.parentNode.removeChild(element); }
          }
        }
      }
      FC.Ajax.obtenir("text", "json.txt", function(json) {
        var obj = document.createElement("script");
        obj.setAttribute("type", "text/javascript");
        obj.text = "var o = "+ json +";";
        document.getElementById("json").appendChild(obj);	       
        alert(o[1].p1);
      });
      </script>
    </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{p1:"blah",p2:"bleh"},{p1:"blih",p2:"bloh"}]

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut
    Désolé d'avoir été impatient

    Pour ce qui est du tableau, j'avais tenté de créer un tableau multidimensionnel en JS, et de le passer dans une URL suite à la création de l'objet JSON :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objJSON = Object.toJSON(monTableauJS);
    Le résultat était qu'en faisant un alert de mon objJSON, j'obtenais une suite de [[]] vides.
    La seule technique que j'ai donc trouvée pour passer utiliser une strucuture de tableau multidimensionnel à été de créer un objet en javascript et de l'utiliser comme un tableau. A ce moment là, la méthode toJSON me retourne bien une chaine JSON.

    Je ne sais pas si je me suis bien expliqué

  12. #12
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Un tableau multidimensionnel est tout à fait possible à passer en json. Essaie avec mon code, tu n'as qu'à modifier le fichier json.txt.

    [edit] ou montre-nous la syntaxe du tableau
    [edit 2] je suis parti tout seul vers Ajax, mais tu ne parles pas d'Ajax, toJSON n'est pas du javascript natif, qu'est-ce donc?

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 250
    Points : 75
    Points
    75
    Par défaut
    toJSON est une méthode de prototype. Je ne travail qu'avec ça et ne connais pas du tout les méthodes AJAX de base de JS...

    Le problème avec ton fichier .txt est que mon tableau doit être créé en JS. C'est un e tableau évolutif, à plusieurs dimensions.
    Donc la soluce d'un fichier texte me semble impossible dans mon cas!

    De plus que la syntaxe que tu m'a montrée ne me correspond pas dans mon cas, il me faut une syntaxe "tableau" et non JSON. D'où l'utilisation de la fonction toJSON.

Discussions similaires

  1. [POO] Fonction Affichage OBjet Javascript!
    Par lekunfry dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 20/07/2007, 06h28
  2. [POO] reférence à un objet javascript
    Par Giansolo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/05/2007, 09h53
  3. [POO] contenu d'un objet javascript
    Par wtfu dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/08/2006, 11h12
  4. [POO] Comment acceder a un objet javascript instancie dans une page mere
    Par herbert dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 20/07/2006, 19h34
  5. [POO] objet javascript et html
    Par jakouz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/04/2006, 17h58

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