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 :

Parcourir un tableau associatif avec forEach


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut Parcourir un tableau associatif avec forEach
    Bonjour a tous,

    j'ai un soucis avec un forEach.
    J'ai un tableau associatif date[2018].
    lorsque je veux le parcourir il ne parcours pas a partir du début. Les clés sont 01, 02, 03 ... 10, 11,12 (ce sont les mois de l'année). Le foreach ne parcours pas les clé commençant par 0. Il commence a 10.
    Comment cela se fait il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    date[2018].forEach((value, key) => {
           tab.push(value);
       });
    merci d'avance

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Certains ne sont pas d'accord avec l'expression "tableau associatif"...

    En JS la boucle forEach fonctionne avec les tableaux : https://developer.mozilla.org/fr/doc.../Array/forEach ou les NodeList : https://developer.mozilla.org/fr/doc...deList/forEach...

    Pour les objets il y a plusieurs possibilités, exemple la boucle for...in : https://developer.mozilla.org/fr/doc...tions/for...in...

    Autre possibilité (Object.entries() avec une boucle for...of ) : https://developer.mozilla.org/fr/doc...Object/entries

    Si tu tiens à utiliser la boucle forEach c'est possible avec Object.keys() : https://gomakethings.com/the-es6-way...lla-javascript

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 121
    Points
    44 121
    Par défaut
    Bonjour,
    montre nous comment est déclaré ton « tableau associatif ».

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour Beginner,

    merci pour ton retour, je vais regarder tout ça !

    NoSmoking: j'ai fais un new Array(),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    month = item.get("date").split("-");
                if(date[month[0]] === undefined) {
                    date[month[0]] = new Array();
                }
                date[month[0]][month[1]] = item.get('distance');
    EDIT:
    Bon j'ai peut etre trouvé un moyen. Je fais un parseInt(month[1]) pour retirer les 0

  5. #5
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    difficile de te donner une réponse précise tant que tu refuse de nous donner la structure de date[2018] .

    Citation Envoyé par NoSmoking Voir le message
    montre nous comment est déclaré ton « tableau associatif ».
    et ta réponse est vraiment incomplète de ce point de vue.

    Sinon ça devrait pouvoir se résoudre par un simple tri
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date[2018]
      .sort((a, b) => a.localeCompare(b))
      .forEach( val => tab.push(val) );
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    Merxi pour ta réponse.
    Je ne refuse rien...
    Dans mon tableau tab[2018] j'ai une clé par mois {01:1000,02:2500,....,11:2388, 12:6587}

    J'ai pas accès à mon pc ce week-end. Je testerai ta solution lundi !
    Merci encore

  7. #7
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    cette description de données ne correspond pas au premier post, car dans ce cas la, ton code renvoit une erreur date[2018].forEach is not a function

    Partant de la description de ton denier post voici une solution possible:
    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
    let date= [];
     
    date[2018]=
          { '01': 1000
          , '07': 7777
          , '03': 3333
          , '12': 6587
          , '10': 1010  
          , '05': 5555
          , '06': 6666
          , '04': 4444
          , '08': 8888
          , '09': 9999
          , '02': 2500
          , '11': 2388
          };
     
    let tab = Object
                .keys(date[2018])
                .sort((a,b)=>Number(a)-Number(b))
                .map(k=>date[2018][k])
                ;
     
    console.log( tab );
    ce qui donne comme résultat :
    tab = [ 1000, 2500, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 1010, 2388, 6587 ]
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par alex8276 Voir le message
    Bon j'ai peut etre trouvé un moyen. Je fais un parseInt(month[1]) pour retirer les 0
    Ça me parait effectivement la solution la plus simple.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    cette description de données ne correspond pas au premier post, car dans ce cas la, ton code renvoit une erreur date[2018].forEach is not a function

    Partant de la description de ton denier post voici une solution possible:
    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
    let date= [];
     
    date[2018]=
          { '01': 1000
          , '07': 7777
          , '03': 3333
          , '12': 6587
          , '10': 1010  
          , '05': 5555
          , '06': 6666
          , '04': 4444
          , '08': 8888
          , '09': 9999
          , '02': 2500
          , '11': 2388
          };
     
    let tab = Object
                .keys(date[2018])
                .sort((a,b)=>Number(a)-Number(b))
                .map(k=>date[2018][k])
                ;
     
    console.log( tab );
    ce qui donne comme résultat :
    Je vérifierai ça début de semaine

  10. #10
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    Citation Envoyé par alex8276 Voir le message
    Je vérifierai ça début de semaine
    Quelle semaine ?
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    désolé, j'ai pas eu beaucoup de temps cette semaine.
    Pour le moment j'ai utilisé la méthode avec le parseInt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    array.forEach(function(item) {
            if(item.get("type") == 'Ride') {
                month = item.get("date").split("-");
                if(date[month[0]] === undefined) {
                    date[month[0]] = new Array();
                }
                date[month[0]][parseInt(month[1])] = item.get('distance');
            }
        });

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

Discussions similaires

  1. [PDO] Boucle foreach() sur un tableau associatif avec référence pour lier des paramètres
    Par Samy-DT dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/09/2015, 14h46
  2. [Tableaux] Tableau associatif avec des array
    Par Piccolo_son dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2007, 08h23
  3. Réponses: 2
    Dernier message: 20/10/2006, 10h25
  4. [Tableaux] tableau associatif avec select
    Par jive dans le forum Langage
    Réponses: 2
    Dernier message: 22/09/2006, 19h45
  5. [Tableaux] Tableau associatif et foreach()...
    Par Julien.alkaza dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2006, 15h14

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