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

AngularJS Discussion :

Parcourir un tableau multi-dimensionnel


Sujet :

AngularJS

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Parcourir un tableau multi-dimensionnel
    Bonjour,
    Voilà j'ai un code comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     $scope.nouveau = [
       {
        val1:"mavaleur1", 
        val2:"mavaleur2", 
        val3 : [
            {
                moi : "je suis",
                toi : "tu es"
            }
        ],
       val4 : "quatrième valeur"
        }
       ];
    dans index.html je fais un ng-repeat (ca c'est ok) mais je voudrais récupérer la valeur "je suis" dans val3....j'ai essayé un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <p ng-repeat="value in nouveau">{{value.val3['moi']}} 
        </p>
    mais ça ne marche pas.
    Si vous avez une idée je suis preneur.
    Merci !

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 176
    Points : 45 072
    Points
    45 072
    Par défaut
    Bonjour,
    moi n'est pas une propriété de val3 mais du premier objet du premier indice du tableau contenu par val3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        val3 : [
            {
                moi : "je suis",
                toi : "tu es"
            }
        ],
    donc on y accède en faisant value.val3[0].moi par exemple.

  3. #3
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    on y accède en faisant value.val3[0].moi par exemple.
    Yes! Sinon, value.val3[0]['moi']

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponses, ça marche mais je ne comprends pas la logique du code;

    pourquoi val3[0], alors qu'il est déjà remplacé par ['moi'] non, justement pour ne pas avoir une clé (clé:valeur) abstraite (ou numérique) ?

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 176
    Points : 45 072
    Points
    45 072
    Par défaut
    dans ton code tu déclares val3 comme étant un Array val3 : [..] et non comme un objet val3 : {..}

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    je sais bien , mais ce que je voudrais justement comprendre c'est que comme c'est un Array(), ['moi'] ne représenterai pas le premier indice du tableau ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Aaah je vois, en fait la valeur du tableau est délimité par les accolades et la clé est en incrément auto...
    Mais dites-moi si à la place du val3[0]["moi"] je voudrais remplacer le [0] par ["zero"] par exemple; comment écrirait-ton la syntaxe ?

  8. #8
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par dx007 Voir le message
    Mais dites-moi si à la place du val3[0]["moi"] je voudrais remplacer le [0] par ["zero"] par exemple; comment écrirait-ton la syntaxe ?
    Pourquoi ? strange feature...

    0 est un indice => cf. documentation Javascript.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Pourquoi ? strange feature...

    --------------------------------------

    Pour savoir justement ou est placé exactement cet indice invisible trompeur val3[0] la;

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 176
    Points : 45 072
    Points
    45 072
    Par défaut
    Pour savoir justement ou est placé exactement cet indice invisible trompeur val3[0] la;
    je ne vois pas en quoi cet indice est trompeur, c'est la façon de fonctionner lorsque l'on veut accéder à un élément d'un tableau.

    Je pense qu'il faut que tu essaies de comprendre la structure que tu mets en place, ici un Array d'objet, mais tu pourrais utiliser directement un objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    val3 :  {
        moi : "je suis",
        toi : "tu es"
    },
    Sinon rien ne t'empêche de passer par une variable "constante"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var zero = 0;
    var tableau = ['un', 'deux', 'trois'];
    console.log( tableau[zero]);  // >> 'un'
    Mais quel est le but recherché !?!

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    bah en fait le but est de récupérer des emails (par exemple) retourné par le serveur sous un format JSON comme celui-ci:
    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
    $scope.dossiers = [
    		{ value: "RECEPTION", label: 'Boite de réception', emails: [
    			{ id: 1, from: "Albator", to: "Rudy", subject: "Je reviens", date: new Date(2014, 2, 20, 15, 30), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id ligula ac sem fringilla mattis. Nullam sodales mi vel semper volutpat. Phasellus lorem leo, luctus a lectus id, posuere aliquet orci. Praesent sit amet ipsum porttitor, tempus odio vel, bibendum mauris. Etiam magna lorem, rhoncus eget euismod ac, lobortis quis." },
    			{ id: 2, from: "Capitaine Flam", to: "Rudy", subject: "Bisous de l'espace", date: new Date(2014, 3, 18, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur elementum leo. Curabitur luctus, magna a tempor sodales, orci velit dictum magna, nec pharetra turpis ante vehicula ante. Sed sed libero suscipit, rutrum ligula vel, tempor lorem. Phasellus pulvinar dolor ac velit porttitor pulvinar. Mauris felis quam, consequat at <b>mauris</b>." },
    			{ id: 3, from: "Pikachu", to: "Rudy", subject: "Pika pika !", date: new Date(2014, 2, 15, 16, 12), content: "Pika pika ! Chuuuuuu. Pika pika ! Chuuuuuu. Pika pika ! Chuuuuuu. Pika pika ! Pika pika ? Piiiiika Chuuuuuu. Pika pika ! Pikachu. Pika pika pika." },
    			{ id: 4, from: "Barbapapa", to: "Rudy", subject: "Hulahup Barbatruc", date: new Date(2014, 2, 15, 14, 15), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur elementum leo. Curabitur luctus, magna a tempor sodales, orci velit dictum magna, nec pharetra turpis ante vehicula ante. Sed sed libero suscipit, rutrum ligula vel, tempor lorem. Phasellus pulvinar dolor ac velit porttitor pulvinar. Mauris felis quam, consequat at <b>mauris</b>." }
    		]  }, 
    		{ value: "ARCHIVES", label: "Archives", emails: [
    			{ id: 5, from: "Candy", to: "Rudy", subject: "Bon anniversaire", date: new Date(2014, 2, 15, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id ligula ac sem fringilla mattis. Nullam sodales mi vel semper volutpat. Phasellus lorem leo, luctus a lectus id, posuere aliquet orci. Praesent sit amet ipsum porttitor, tempus odio vel, bibendum mauris. Etiam magna lorem, rhoncus eget euismod ac, lobortis quis." },
    			{ id: 6, from: "Hiro Nakamura", to: "Rudy", subject: "Konichiwa", date: new Date(2014, 2, 18, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur elementum leo. Curabitur luctus, magna a tempor sodales, orci velit dictum magna, nec pharetra turpis ante vehicula ante. Sed sed libero suscipit, rutrum ligula vel, tempor lorem. Phasellus pulvinar dolor ac velit porttitor pulvinar. Mauris felis quam, consequat at <b>mauris</b>." },
    			{ id: 7, from: "Asuka Langley Soryu", to: "Rudy", subject: "Ca va chier", date: new Date(2014, 2, 15, 17, 50), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id ligula ac sem fringilla mattis. Nullam sodales mi vel semper volutpat. Phasellus lorem leo, luctus a lectus id, posuere aliquet orci. Praesent sit amet ipsum porttitor, tempus odio vel, bibendum mauris. Etiam magna lorem, rhoncus eget euismod ac, lobortis quis." }
    		]  },
    		{ value: "ENVOYES", label: "Envoyés", emails: [
    			{ id: 8, from: "Rudy", to: "Albator", subject: "Bien la famille ?", date: new Date(2014, 2, 15, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id ligula ac sem fringilla mattis. Nullam sodales mi vel semper volutpat. Phasellus lorem leo, luctus a lectus id, posuere aliquet orci. Praesent sit amet ipsum porttitor, tempus odio vel, bibendum mauris. Etiam magna lorem, rhoncus eget euismod ac, lobortis quis." },
    			{ id: 9, from: "Rudy", to: "Capitaine Flam", subject: "Gloubiboulga Night", date: new Date(2014, 2, 18, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur elementum leo. Curabitur luctus, magna a tempor sodales, orci velit dictum magna, nec pharetra turpis ante vehicula ante. Sed sed libero suscipit, rutrum ligula vel, tempor lorem. Phasellus pulvinar dolor ac velit porttitor pulvinar. Mauris felis quam, consequat at <b>mauris</b>." }
    		] },
    		{ value: "SPAM", label: "Courrier indésirable", emails: [
    			{ id: 10, from: "Rue du discount", to: "Rudy", subject: "Envie d'un nouveau frigo ?", date: new Date(2014, 2, 15, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id ligula ac sem fringilla mattis. Nullam sodales mi vel semper volutpat. Phasellus lorem leo, luctus a lectus id, posuere aliquet orci. Praesent sit amet ipsum porttitor, tempus odio vel, bibendum mauris. Etiam magna lorem, rhoncus eget euismod ac, lobortis quis." },
    			{ id: 11, from: "Sofinnoga", to: "Rudy", subject: "Besoin d'argent ?", date: new Date(2014, 2, 18, 16, 12), content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur elementum leo. Curabitur luctus, magna a tempor sodales, orci velit dictum magna, nec pharetra turpis ante vehicula ante. Sed sed libero suscipit, rutrum ligula vel, tempor lorem. Phasellus pulvinar dolor ac velit porttitor pulvinar. Mauris felis quam, consequat at <b>mauris</b>." }
    		] }
    Je veux recupérer tous les champs "emails" dans un tableau avec un ng-repeat par exemple...
    Ensuite de faire un ng-click sur un mail en particulier et qu'il m'affiche le mail correspondant.

  12. #12
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par dx007 Voir le message
    Je veux recupérer tous les champs "emails" dans un tableau avec un ng-repeat par exemple...
    Ensuite de faire un ng-click sur un mail en particulier et qu'il m'affiche le mail correspondant.
    soit tu fais ça dans on controleur (préparer le tableau emails soit tu mets deux ng-repeat imbriqués dans le template (html)

    La deuxieme solution est meilleure car tu ne perds pas la référence vers les propriétés "value" et "label".

    Alors pour la première solution, je te propose d'utiliser underscore.js pour récupérer toutes les propriétés "emails" de ton tableau d'un coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $scopre.emails = _.pluck($scope.dossiers, 'emails');

    Sinon, tu devra faire des boucles imbriquées pour construire ton tableau emails.

    Deuxieme solution :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div ng-repeat="dossier in dossiers">
           <ul>
             <li ng-repeat="email in dossier.emails"> 
               <a href="{{email.subject}}">{{email.subject}}</a> 
             </li>
           </ul>
       </div>

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Je vais opter pour la deuxième solution. Tou ensachant que si par exemple dans email j'avais un autre array il faudrait que je fasse une autre boucle à l'intérieur du <li/>...je sais c'est démentiel mais c'est pour comprendre un peu davantage ces points de soutures entre les array[] en JS (qui est bien différente de php..)

    Merci beaucoup à tous !

  14. #14
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par dx007 Voir le message
    il faudrait que je fasse une autre boucle à l'intérieur du <li/>
    Tu n'es pas obligé d'utilser les listes
    tu peux tout à fait faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div ng-repeat="dossier in dossiers">
             <div ng-repeat="email in dossier.emails"> 
                    <div ng-repeat="whatever in email.whatever">
                              <div> {{whatever}} </div>
                    </div> 
             </div>
       </div>

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    et si whatever = [{}] ; (?)

    En fait le but c'est d'avoir une astuce pour parcourir l'objet de tableau qui elle-même serait un tableau, et cela à n'importe quel niveau du code....d’où l'intitulé de ce post: "pacourir un tableau multi-dimensionnel"
    Mais tu as tout a fait raison, c'est juste cette astuce qui me manque à chaque fois

  16. #16
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par dx007 Voir le message
    et si whatever = [{}] ; (?)
    Pareil, tu reboucle dessus.

    Citation Envoyé par dx007 Voir le message
    d’où l'intitulé de ce post: "pacourir un tableau multi-dimensionnel"
    Au fait, ici, on ne parle pas de tableau multi dimensionnel. On ne parque que de tableaux imbriqués.

    tableau imbriqués : montableau = ["value1": ["1", "2"]]tableaux multi dimensionnels : montableau = ["1", "3"]["1", "2"] qui nous donne une matrice !

    [EDIT] ma dernière phrase est discutable... on peut parler de tableaux multidimensionnels pour les deux cas. Je voulais juste dire que pour boucler dessus, tu fais comme si tu accédais à une propriété d'un objet.
    D'ailleurs, si tu vois la spéc ECMA5, l'accès à une propriété d'un objet ou à un indice d'un tableau se fait de la même manière... [/EDIT]

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Ca rentre en profondeur on dirait, plus on va loin dans le tableau...hihi.
    ECMA..... quoi??????

    Merci pour tout Slim en tout cas, j'espère ne pas être confronté à ce genre de cas un jour.......

  18. #18
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par dx007 Voir le message
    ECMA..... quoi??????
    C'est la spécification sur laquelle repose le javascript... : ici

    Citation Envoyé par Wikipedia
    Il s'agit donc d'un standard, dont les spécifications sont mises en œuvre dans différents langages de script, commeJavaScript ou ActionScript, ainsi qu'en C++ (norme 2011). C'est un langage de programmationorienté prototype.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/02/2007, 11h52
  2. Réponses: 5
    Dernier message: 04/10/2006, 19h49
  3. [Tableaux] Tableau multi dimensionnel
    Par gids01 dans le forum Langage
    Réponses: 7
    Dernier message: 02/10/2006, 17h18
  4. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 22h23
  5. Réponses: 4
    Dernier message: 24/08/2005, 15h09

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