Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les tableaux contiennent plein de choses

Entre autre des fonctions.

Sujet résolu
    30 juillet 2009 à 8:55:04

    Bonjours,

    Alors que je débug un script je suis amené a affiché le contenu de mes tableaux. Avec un fonction qui émule la fonction print_r de php j'obtiens ca :

    [_7] => 2
    [_8] => 1
    [_9] => 2
    [_10] => 10
    [_11] => 2
    [_6] => 5
    [$family] => object
              [name] => array
    [each] => function forEach() { [native code] }
    [clean] => function () { return this.filter($defined); }
    [associate] => function (c) { var d = {}, b = Math.min(this.length, c.length); for (var a = 0; a < b; a++) { d[c[a]] = this[a]; } return d; }
    [link] => function (c) { var a = {}; for (var e = 0, b = this.length; e < b; e++) { for (var d in c) { if (c[d](this[e])) { a[d] = this[e]; delete c[d]; break; } } } return a; }
    [contains] => function (a, b) { return this.indexOf(a, b) != -1; }
    [extend] => function (c) { for (var b = 0, a = c.length; b < a; b++) { this.push(c[b]); } return this; }
    [getLast] => function () { return this.length ? this[this.length - 1] : null; }
    [getRandom] => function () { return this.length ? this[$random(0, this.length - 1)] : null; }
    [include] => function (a) { if (!this.contains(a)) { this.push(a); } return this; }
    [combine] => function (c) { for (var b = 0, a = c.length; b < a; b++) { this.include(c[b]); } return this; }
    [erase] => function (b) { for (var a = this.length; a--; a) { if (this[a] === b) { this.splice(a, 1); } } return this; }
    [empty] => function () { this.length = 0; return this; }
    [flatten] => function () { var d = []; for (var b = 0, a = this.length; b < a; b++) { var c = $type(this[b]); if (!c) { continue; } d = d.concat(c == "array" || c == "collection" || c == "arguments" ? Array.flatten(this[b]) : this[b]); } return d; }
    [hexToRgb] => function (b) { if (this.length != 3) { return null; } var a = this.map(function (c) {if (c.length == 1) {c += c;}return c.toInt(16);}); return b ? a : "rgb(" + a + ")"; }
    [rgbToHex] => function (d) { if (this.length < 3) { return null; } if (this.length == 4 && this[3] == 0 && !d) { return "transparent"; } var b = []; for (var a = 0; a < 3; a++) { var c = (this[a] - 0).toString(16); b.push(c.length == 1 ? "0" + c : c); } return d ? b : "#" + b.join(""); }

    Ce qui est surligné c'est ce que je lui ai mis donc c'est normal. Mais le reste ? Bon je suppose que c'est normal mais c'est un peu chiant. Après je fais une boucle sur tout le tableau pour récupérer des données. Mais c'est débile de boucler sur des trucs qui n'ont pas lieu d'être.

    Qu'est ce que c'est que toute ces données ? Est ce que je peux les supprimer ?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      30 juillet 2009 à 9:03:15

      Non, tu ne peux pas :) (edit: en fait, c'est toutes les fonctions qu'un array JS peut utiliser)
      (en passant, je suis curieux de savoir la fonction que tu utilises pour afficher ça)
      en général, pour traverser un tableau en JS, on fait :
      var valeurs = "";
      var array = ["val1","val2"];
      for(var i = 0; i<array.length;i++){
      	valeurs += array[i]+"\n";
      }
      alert(valeurs);
      
      • Partager sur Facebook
      • Partager sur Twitter
        30 juillet 2009 à 9:09:44

        Pour print_r je me suis pas fait chier j'ai pris un code qui existait déjà. Je faisais a peu prêt comme toi avant mais comme ca c'est plus propre, plus lisible.

        Mais si je ne peux pas virer ces choses comment je fais ? Après je fais ca :

        for (i in resultats) 
        {	
           var schema = oData.getElementById(i);
        }
        

        Du coup là je vais faire un truc qui ressemble à var schema = oData.getElementById("$family"); et c'est franchement très con. Ou alors je rajoute des condition partout...
        • Partager sur Facebook
        • Partager sur Twitter
          30 juillet 2009 à 9:13:58

          J'ai pas trop compris ... pourquoi tu veux l'utiliser ?
          • Partager sur Facebook
          • Partager sur Twitter
            30 juillet 2009 à 9:18:57

            Bah je veux utiliser mon tableau. Je crée pas des tableaux dans le vent pour faire joli dans le code. Mon tableau contient des données et je les utilises c'est tout.
            En l'occurrence mon tableau est un tableau associatif qui associe l'id d'une image a sa pertinence ([id] => pertinence). Et ensuite je récupère l'image dans un fichier xml grâce a son id.
            • Partager sur Facebook
            • Partager sur Twitter
              30 juillet 2009 à 10:15:32

              Citation : Aravis

              Bah je veux utiliser mon tableau. Je crée pas des tableaux dans le vent pour faire joli dans le code. Mon tableau contient des données et je les utilises c'est tout.


              :lol: oui c'est à espérer... mais en sachant pourquoi et comment tu les utilises, c'est plus facile pour trouver la solution adaptée

              Citation : Aravis

              En l'occurrence mon tableau est un tableau associatif qui associe l'id d'une image a sa pertinence ([id] => pertinence). Et ensuite je récupère l'image dans un fichier xml grâce a son id.



              donc ton array c'est un truc genre...
              var resultats = [[1] => 10,[5] => 20, ...];
              ? (enfin, pas dans l'ordre pour les clés)
              • Partager sur Facebook
              • Partager sur Twitter
                30 juillet 2009 à 10:21:26

                Non mais la façon dont tu as posé la question c'était bizarre ^^ .

                Exactement sauf que l'id n'est pas un nombre mais une chaine de caractère (pour la validité du document XML) donc c'est plutot var resultats = [[_1] => 10,[_5] => 20, ...]; et avec des clé théoriquement triées par ordre décroissant de pertinence (mais je crois que ca marche pas encore bien).
                • Partager sur Facebook
                • Partager sur Twitter
                  30 juillet 2009 à 11:02:06

                  Pourquoi ne pas utiliser un foreach ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 juillet 2009 à 11:05:50

                    Parce qu'il existe pas ? :D
                    @Aravis : la déclaration de ton tableau de base se fait comment ? (j'ai pas réussi à mettre des clés avec des chaines de caractères, comme en PHP)
                    Si c'est comme je pense, on peut pas, et j'aurais trouvé une "solution" un peu barbare mais bon...

                    <script>var resultats = [["lol",10], ["lol2", 20],["lol3", 20]]; 
                    for(i in resultats){
                    var toAlert="";
                    	toAlert += "id = "+resultats[i][0] + "\n"; // id
                    	toAlert += "pertinence = "+resultats[i][1]; //pertinence
                    alert(toAlert);
                    }</script>
                    


                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 juillet 2009 à 11:20:32

                      var listeSchema = oData.getElementsByTagName("schema");
                      resultats = Recherche(listeSchema, input);
                      

                      Et quelque part dans ma fonction de recherche j'ai des choses qui ressemblent a ca dans un boucle :

                      rep[id] = occurences;
                      

                      ou encore je peux avoir ca (je t'épargne la fonction de recherche complète).

                      rep[id] = rep[id] + occurences;
                      

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 juillet 2009 à 11:24:53

                        et si tu fais
                        alert(typeOf(resultats));
                        tu obtiens pas Object plutôt ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 juillet 2009 à 11:43:41

                          Ca ca fait planter le script :

                          Citation

                          Erreur : typeOf is not defined
                          Fichier Source : http://localhost/Bio/Javascript/dom.js
                          Ligne : 48

                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 juillet 2009 à 11:49:28

                            Dsl je connaissais pas ...

                            Oui donc j'ai object
                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 juillet 2009 à 11:55:43

                              alors :
                              <script>var resultats = {lol:10, lol2:20,lol3: 20}; 
                              
                              var toAlert= "";
                              for(i in resultats){
                              	toAlert += "id:"+i+" vaut : ";
                              	toAlert += resultats[i] +"\n"; // clé
                              	
                              }
                              alert(toAlert);</script>
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 juillet 2009 à 12:04:36

                                Oui mais un tableau de ce genre c'est ingérable a créer dynamiquement.

                                Ma fonction de recherche fini comme ca :

                                if (array_key_exists(id, rep)) 
                                        rep[id] = rep[id] + occurences; // On aditionne les occurences
                                      else
                                         rep[id] = occurences; // sinon on ajoute l'id
                                      }
                                   }
                                }
                                return rep;
                                

                                Comment gérer un tableau comme celui que tu ma donnée ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 juillet 2009 à 14:32:59

                                  Le tableau que je t'ai donné est en fait un objet!

                                  d'ailleurs, tu parles de tableau mais en fait c'est un objet
                                  dans ton cas, tu créés quelque chose genre :
                                  var objet = {_5 : 10,_10 : 20};
                                  var objet = {_5 = 10,_10 = 20};
                                  var toAlert= "";
                                  for(i in resultats){
                                  	toAlert += "id:"+i+" vaut : ";
                                  	toAlert += resultats[i] +"\n"; // clé
                                  	
                                  }
                                  alert(toAlert);
                                  

                                  Essaie ça !
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 juillet 2009 à 14:36:24

                                    Non mais l'afficher et le lire ca va bien je comprend.
                                    Mais c'est pour le construire que ca va pas.

                                    _5 c'est quoi ? C'est ni une chaine de caractère, ni un nombre, ni une constante (je sais même pas si ca existe en js)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      30 juillet 2009 à 14:40:08

                                      c'est une propriété de l'objet.
                                      au début, tu m'as montré ça :
                                      var resultats = [[_1] => 10,[_5] => 20, ...];

                                      hé bien, ça correspond à ça, mais c'est un objet et non un tableau.
                                      _1 était l'id, 10 était la pertinence
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        30 juillet 2009 à 14:44:46

                                        Oui mais je veux le contruire dynamiquement. En gros je veux le construire comme ca :

                                        bloucle
                                        {
                                          var id = recuperer_un_id();
                                          var occurence = calculer_occurence();
                                        
                                          mon_tableau_objet = ???
                                        }

                                        Et ajoute un id avec une occurence a chaque tour.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          30 juillet 2009 à 14:46:35

                                          Peu importe le nombre d'id, je t'ai mis un exemple pour que tu voies clairement quelles variables utiliser pour afficher quoi ;)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            30 juillet 2009 à 14:48:16

                                            Je veux pas l'afficher, je veux le construire
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              30 juillet 2009 à 15:07:46

                                              oups... je croyais que tu l'avais déjà en fait :-°
                                              désolé, je cherche un truc et j'édite

                                              EDIT: Trouvé
                                              var resultats = [];
                                              et ensuite, dans ta boucle,
                                              resultats.push([id, occurence]);

                                              et pour le lire ensuite :
                                              <script>var resultats = [["lol",10], ["lol2", 20],["lol3", 20]]; 
                                              for(i in resultats){
                                              var toAlert="";
                                              	toAlert += "id = "+resultats[i][0] + "\n"; // id
                                              	toAlert += "pertinence = "+resultats[i][1]; //pertinence
                                              alert(toAlert);
                                              }</script>
                                              
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                30 juillet 2009 à 15:28:49

                                                Citation : birdy42

                                                var objet = {_5 = 10,_10 = 20};



                                                Euh... var objet = {_5 : 10,_10 : 20}; plutôt... non ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  30 juillet 2009 à 15:31:23

                                                  Ouups.. en effet, je corrige, mais bon c'est pas ce qu'il/elle veut de toute façon...
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    30 juillet 2009 à 15:41:14

                                                    Merci. Par contre je vais pas tester ca maintenant.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Les tableaux contiennent plein de choses

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown