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 :

JSON : J'hésite entre deux façons de programmer


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant data manager
    Inscrit en
    Février 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant data manager

    Informations forums :
    Inscription : Février 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut JSON : J'hésite entre deux façons de programmer
    Bonjour,

    Désolé pour le titre pas très explicite. Je suis confronté à une petite problématique, j'ai deux façons pour la résoudre, mais je cherche la plus propre des deux (ou une autre méthode si vous avez une meilleure idée^^).

    J'ai besoin pour mon programme d'afficher par ordre alphabétiques une liste de groupes identifiés par un paramètre group_id. Dans un premier temps, je récupère donc (via sql) mon objet JSON qui va se présenter comme ceci (pour simplifier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    '2': { name: 'Bulbizarre'},
    '8': { name: 'Salamèche'},
    '9': { name: 'Carapuce'}
    }
    Ou alors, si je trie au niveau de la requête et j'obtiens un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
     { group_id: 2, name: 'Bulbizarre'},
     { group_id: 9, name: 'Carapuce'},
     { group_id: 8, name: 'Salamèche'},
    ]
    Cette deuxième forme est pratique à l'affichage, tout se met dans le bon ordre. Problème : je dois accéder à l'identifiant du groupe pour faire des opérations dessus (consulter les membres, supprimer le groupe...). Je suis obligé d'identifier mes groupes par leur index tableau (Bulbizarre serait le 0, Salamèche le 2), pour retrouver le group_id après, ce qui rajoute une couche. Ca fonctionne, mais ce n'est pas satisfaisant.

    L'autre possibilité que je vois : "dédoubler" ma variable pour avoir un objet JSON trié par group_id, et un tableau, réservé pour l'affichage, qui serait trié par ordre alphabétique. Mais dédoubler une variable me paraît assez moche comme solution.

    Si vous avez des suggestions, je vous en serais très reconnaissant !

    Merci bien.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Personnellement, j'ai toujours préféré la 2e écriture.
    Elle est plus lisible et plus facile à utiliser. En plus, en javascript, certaines fonctions ne sont disponibles que pour des Array de façon native. Comme par exemple array.length qui n'existe pas pour un objet
    Il est donc aussi plus facile de parcourir un tableau qu'un objet.
    D'ailleurs, dans la plupart des langages on a pas le choix : seul un array peut contenir un ensemble de "choses" (habituellement un array d'objets)

    Pour ce qui est de parcourir un tableau, il faudrait voir la taille de celui-ci et peut-être faire des tests...
    Personnellement, je ne me suis jamais vraiment tracassé car parcourir un tableau à la recherche d'un élément c'est pas hyper compliqué
    A contrario, si le tableau contient beaucoup d'éléments, faire un tableau de correspondance (index <=> id) ça peut consommer beaucoup de mémoire pour rien

  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant data manager
    Inscrit en
    Février 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant data manager

    Informations forums :
    Inscription : Février 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse Darkstar!

    Effectivement, peu de groupes sont attendus, un index peut être un plus et rapidement se programmer ^^

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    je dirais que cela peut dépendre des données à manipuler et des relations qu'elles ont entre elles, un mixte des deux est envisageable et bien sûr de la façon dont tu vas les structurer après lecture de ta base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const TBL_JOUEURS = {
      "A001": {         /* id unique */
        "nom": "Puddin",
        "prenom": "Holmes"
      },
      "A002": {
        "nom": "Alleway",
        "prenom": "Alvan"
      },
      "A003": {
        "nom": "Strutley",
        "prenom": "Leia"
      }
    }
    avec par exemple des équipes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const TBL_EQUIPE = {
      "theBest": ["A001", "A003"],
      "theVeryBest": ["A002", "A004"],
    }
    Les méthodes de manipulations des Object existent même si pas toujours intuitives
    • Object.keys(obj)
    • Object.values(obj)
    • Object.entries(obj)
    • ...


    Ne pas négliger non plus ta facilité à manipuler une structure ou une autre.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour poursuivre ta réflexion, je te conseille de t'intéresser aux Map et aux WeakMap introduites depuis ECMAScript 6.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2020, 09h08
  2. Réponses: 7
    Dernier message: 08/01/2020, 07h05
  3. Communication entre deux langages de programmation différents.
    Par Filadelphila dans le forum Protocoles
    Réponses: 11
    Dernier message: 14/11/2019, 17h01
  4. Choix entre deux façons de stocker, laquelle est la plus propre ?
    Par Runther dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 18/07/2018, 11h35
  5. Réponses: 7
    Dernier message: 22/10/2010, 22h57

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