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 :

Réorganiser un tableau d'objets en plusieurs tableaux


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur d'étude Géomatique
    Inscrit en
    Mars 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude Géomatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 42
    Points : 19
    Points
    19
    Par défaut Réorganiser un tableau d'objets en plusieurs tableaux
    Bonjour à tous les développeurs nocturnes !

    Voilà j'ai un soucis pour passer de la donnée d'un type d'objet vers un autre type d'objet.
    Le contexte c'est que je fais plusieurs requêtes REST pour obtenir des tableaux d'objets ayant la structure suivante :
    0_7 : [{idMode : vélo, Count : 14}, {idMode : voiture, Count : 24}, ...]
    0_7 représente un horaire (de 0 à 7H), et j'ai plusieurs horaires.
    J'aurai donc aussi :
    7_9 : [{idMode : vélo, Count : 25}, {idMode : voiture, Count : 52}, ...]
    (petite subtilité parce que ça serait trop simple sinon : il peut y avoir des horaires où certains modes ne sont pas présent, il faut leur mettre un count à 0 et non pas les ignorer sinon la chart peut être faussée ! Par contre j'ai un tableau d'objet avec l'intégralité des modes et je suis entrain de voir si je peux pas me débrouiller à partir de ça !)

    Mon objectif est de représenter des charts des différents modes utilisés en fonction des différents horaires de la journée spécifiés.
    Le format attendu par la lib que j'utilise est la suivante :
    vélo = [14, 25, ...]
    voiture = [24, 52, ...]

    L'avantage est que tous les calculs (sommes, moyennes, etc.) sont traitées dans mes requêtes REST !
    L'inconvénient est que je me perds complètement dans les boucles que je dois mettre en place pour arriver au résultat attendu...

    J'ai pas grand chose comme code à présenter et je ne sais pas si ce serait très parlant vu que j'utilise Dojo mais du javascript natif ferait très bien l'affaire je pense !

    Merci d'avance pour m'aider à palier à manque total de caféine !

  2. #2
    Membre habitué
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Points : 144
    Points
    144
    Par défaut
    Salut

    à mon avis la première chose à faire c'est de rendre tout ça plus clair pour qu'on puisse t'aider et aussi de bien séparer les tâches et fonctionnalités à accomplir pour ton problème, car j'ai l'impression d'un mélange.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur d'étude Géomatique
    Inscrit en
    Mars 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude Géomatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    Arf... je ne vois pas vraiment comment clarifier les choses...

    En entrée j'ai un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    michel = {
    0_7 : {
    {idMode : vélo, Count : 14},
    {idMode : voiture, Count : 24},
    {idMode : piéton, Count : 2}
    },
    7_9 : {
    {idMode : vélo, Count : 25},
    {idMode : voiture, Count : 52},
    {idMode : piéton, Count : 13}
    }
    }
    Et en sortie je voudrai quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vélo = [14, 25]
    voiture = [24, 52]
    piéton = [2 , 13]
    Je suis désolé mais je ne vois pas trop comment mieux expliquer ça !

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Ton objet d'entrée ne place pas les chaines vélo, voiture et pieton entre guillemets ou apostrophes. Du coup, Javascript va les considérer comme des variables. Lesquelle n'en sont pas et cela pose problême...

    Si tu as moyen de corriger cela, tu peux t'inspirer du code ci-dessous...

    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
    var michel = {
    	'0_7' : [
    		{idMode : 'vélo', Count : 14},
    		{idMode : 'voiture', Count : 24},
    		{idMode : 'piéton', Count : 2}
    	],
    	'7_9' : [
    		{idMode : 'vélo', Count : 25},
    		{idMode : 'voiture', Count : 52},
    		{idMode : 'piéton', Count : 13}
    	]
    },
    result={},o,i,j;
     
    for(i in michel){
    	for(j=0;j<michel[i].length;j++){
    		o=michel[i][j];
    		(result[o.idMode]=result[o.idMode]||[]).push(o.Count);
    	}
    }
    qui permet de créer un objet litteral nommé result
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {	"vélo":		[14,25],
    	"voiture":	[24,52],
    	"piéton":	[2,13]
    }

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur d'étude Géomatique
    Inscrit en
    Mars 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude Géomatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    ouah ! Alors tout d'abord un graaaaaaaaand merci ! Tu viens de réduire presque 30 lignes de code foireux en 6 qui marchent à merveille ! (Pour info pour ceux qui liront ce post, il manque un var ligne 13, mais sinon c'est parfait)

    Par contre, pourrais-tu m'expliquer un peu la ligne 18 stp ? Je ne la comprends pas vraiment...

    Enfin, tu ne prends pas en compte la petite subtilité :
    "(petite subtilité parce que ça serait trop simple sinon : il peut y avoir des horaires où certains modes ne sont pas présent, il faut leur mettre un count à 0 et non pas les ignorer sinon la chart peut être faussée ! Par contre j'ai un tableau d'objet avec l'intégralité des modes et je suis entrain de voir si je peux pas me débrouiller à partir de ça !)"
    Exemple :
    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
    var michel = {
    	'0_7' : [
    		{idMode : 'vélo', Count : 14},
    		{idMode : 'voiture', Count : 24},
    		{idMode : 'piéton', Count : 2}
    	],
    	'7_9' : [
    		{idMode : 'vélo', Count : 25},
    		{idMode : 'piéton', Count : 13}
    	],
    	'9_11' : [
    		{idMode : 'vélo', Count : 4},
    		{idMode : 'voiture', Count : 5},
    		{idMode : 'piéton', Count : 6}
    	]
    }
    donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    "vélo":[14,25,4],
    "voiture":[24,5],
    "piéton":[2,13,6]
    }
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    "vélo":[14,25,4],
    "voiture":[24,0,5],
    "piéton":[2,13,6]
    }
    Mais si tu m'expliques la ligne 18, je pense que je pourrai m'en sortir avec un tableau de tous les modes créé dynamiquement à l'aide d'une boucle en amont ! =)

    En tout cas merci beaucoup pour ton aide précieuse !

  6. #6
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Il ne manque pas le mot-clé var à la ligne #13 car la virgule est utilisée. Cela permet de déclarer plusieurs variables en une fois.

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (result[o.idMode]=result[o.idMode]||[]).push(o.Count);
    peut se traduire par
    (	result[o.idMode]=		// Ce tableau
    		result[o.idMode]	// restant inchangé
    	||				// OU
    		[]			// nouvellement crée (s'il n'existait pas)
    )
    .push(o.Count);				// Contient un nouvel élément
    
    remplace un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(typeof result[o.idMode]=='undefined')result[o.idMode]=[]; // Création du tableau si non existant
     
    result[o.idMode].push(o.Count); // Ajoute un élément au tableau result[o.idMode]

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur d'étude Géomatique
    Inscrit en
    Mars 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude Géomatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    ah oui pardon ! J'avais pas pris en compte le json déclaré au dessus ! J'annule ! ^^'

    Bon pour la ligne 18 en fait ça n'a rien à voir avec la petite subtilité, perdu ! Mais merci pour les explications !

  8. #8
    Membre habitué
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Points : 144
    Points
    144
    Par défaut
    Tu viens de réduire presque 30 lignes de code foireux en 6 qui marchent à merveille !
    bravo à eric2a !

    Et j'avais bien raison que ça paraissait complexe

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

Discussions similaires

  1. Tableau trié à partir de plusieurs tableaux triés
    Par amina meher dans le forum Pascal
    Réponses: 1
    Dernier message: 21/12/2015, 20h51
  2. [VBA-E] 1 tableau dynamique, impression de plusieurs tableaux
    Par sunvialley dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/01/2007, 20h14
  3. Réponses: 5
    Dernier message: 13/06/2006, 11h08
  4. [Tableaux] Réorganiser un tableau apres un merge()
    Par Death83 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2006, 01h39
  5. [Tableaux] Réorganiser un tableau
    Par skea dans le forum Langage
    Réponses: 6
    Dernier message: 03/01/2006, 11h59

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