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 :

Séparer un tableau d'objects javascript en plusieurs tableaux


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Par défaut Séparer un tableau d'objects javascript en plusieurs tableaux
    Bonjour,

    mon problème parait à priori simple mais je ne parviens pas à trouver la solution, voilà pourquoi je me tourne vers vous.

    J'ai une sorte de gros tableau d'objets, sous la forme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    var tableau = [  
     { id: 5, "name":"Pierre", "ville":"Rennes" },
     { id: 40, "name":"Jean", "ville":"Paris" },
     { id: 12, "name":"Patrick", "ville":"Rennes" },
     { id: 2, "name":"Sophie", "ville":"Lyon" },
     { id: 2, "name":"Julie", "ville":"Rennes" },
     { id: 2, "name":"Anna", "ville":"Rennes" },
    ];
    Je souhaiterais parcourir ce tableau de manière à obtenir en sorti plusieurs tableaux classés par ville, exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var tableau_Rennes = [
      { id: 5, "name":"Pierre", "ville":"Rennes" },
      { id: 12, "name":"Patrick", "ville":"Rennes" },
      { id: 2, "name":"Julie", "ville":"Rennes" },
      { id: 2, "name":"Anna", "ville":"Rennes" }
    ]        
    var tableau_Paris = [ { id: 40, "name":"Jean", "ville":"Paris" } ]            
    var tableau_Lyon = [ { id: 2, "name":"Sophie", "ville":"Lyon" } ]
    Voici donc le code que j'ai entamé mais je bloc, je ne parviens pas à mettre de valeur dans mon tableau...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for( var i=0; i<tableau.length; i++) {
       var data = tableau[i].ville;
       eval("var tableau_" + data + "=123;"); // ce qui me donne bien une variable tableau_Rennes qui contient 123
      // mais comment faire pour mettre des valeurs dynamique dans cette variable ?
    )
    Ma méthode n'est sans doute pas la bonne ?
    Comment faire pour affecter des valeurs dans la variable dynamique crée ?
    Existe t'il une autre façon de faire ?

    Par avance je vous remercie.
    David

  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
    Par défaut
    eval is evil

    Dans 99% des cas il vaut mieux éviter eval et il existe une meilleure façon de faire la même chose sans.

    Ton besoin correspond à la méthode groupBy de la lib underscore. Voilà une implémentation de cette méthode:

    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
     
    function groupBy(array, property){
    	return array.reduce(function(acc, item) {  
    		var key = item[property];
    		acc[key] = acc[key] || [];
    		acc[key].push(item);
    		return acc;
    	}, {});
    }
     
    var tableau = [  
     { id: 5, "name":"Pierre", "ville":"Rennes" },
     { id: 40, "name":"Jean", "ville":"Paris" },
     { id: 12, "name":"Patrick", "ville":"Rennes" },
     { id: 2, "name":"Sophie", "ville":"Lyon" },
     { id: 2, "name":"Julie", "ville":"Rennes" },
     { id: 2, "name":"Anna", "ville":"Rennes" },
    ];
     
    var tableau_par_ville = groupBy(tableau, "ville")
     
    var tableau_Rennes = tableau_par_ville["Rennes"];

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Par défaut
    Merci beaucoup de la réponse, je connaissais pas, c'est vraiment top. Un grand merci !

    Par contre je me posais une dernière question, dans ta réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tableau_Rennes = tableau_par_ville["Rennes"];
    var tableau_Rennes est en dur...

    Mais si je ne connais le nom des villes à l'avance, comment faire pour générer automatiquement un tableau du nom de la ville ?

    Je ne sais pas si tu vois ce que je veux dire ? (c'est pour ça que je m'étais orienter vers un eval pour créer une variable dynamique...)

  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
    Par défaut
    Rennes était juste un exemple. Tu peux parcourir avec une boucle for..in l'objet tableau_par_ville et tu retrouveras toutes les villes récupérées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(var ville in tableau_par_ville){
          if(!tableau_par_ville.hasOwnProperty(ville)) continue; // juste une petite sécurité au cas où des propriétés énumérables ont été rajoutées dans Object.prototype
          console.log("clé:",ville, "valeur:",tableau_par_ville[ville]);
    }
    Créer un nom de variable dynamique ne te servira à rien puisque si tu ne connais pas les noms des villes à l'avance, impossible aussi de s'y référer par une variable plus loin.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Par défaut
    Ah ok, j'ai capté l'idée !
    Merci beaucoup en tout cas pour l'aide.
    Et merci pour la petite sécurité, bien utile effectivement

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

Discussions similaires

  1. Enregistrer un tableau en object en JavaScript
    Par prilix dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/03/2015, 17h08
  2. Réponses: 5
    Dernier message: 24/09/2009, 14h11
  3. Partager du code Javascript entre plusieurs pages HTML
    Par oceane751 dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 10/01/2006, 15h20
  4. Déclaration d'un tableau d'Object
    Par elitost dans le forum Groovy
    Réponses: 1
    Dernier message: 19/10/2005, 14h15
  5. Recuperer un tableau php dans javascript
    Par 17mounir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/08/2005, 09h07

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