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 :

Tableau de valeur remplaçant attribut d'objet


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 Tableau de valeur remplaçant attribut d'objet
    Bonjour à tous,

    J'ai un tableau d'objet ressemblant à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [
    {id : 1, valeur : "85"},
    {id : 2, valeur : "41"},
    {id : 3, valeur : "15"},
    {id : 4, valeur : "124"}
    ]
    et un autre tableau d'objet ressemblant à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [
    {id : 1, libelle : "Michel"},
    {id : 2, libelle : "Alain"},
    {id : 3, libelle : "Robert"},
    {id : 4, libelle : "Susette"},
    {id : 5, libelle : "Bernard"},
    {id : 6, libelle : "Cerise de Groupama"}
    ]
    Mon objectif, vous l'aurai compris, est d'obtenir le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [
    {id : "Michel", valeur : "85"},
    {id : "Alain", valeur : "41"},
    {id : "Robert", valeur : "15"},
    {id : "Susette", valeur : "124"}
    ]
    :magicien:
    Malheureusement je ne vois pas trop comment faire et j'aurai besoin d'un petit coup de main...

    Merci d'avance pour votre aide !

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    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
    let
        tabValue = [
            {id : 1, valeur : "85"},
            {id : 2, valeur : "41"},
            {id : 3, valeur : "15"},
            {id : 4, valeur : "124"}
        ],
        tabLibelle = [
            {id : 1, libelle : "Michel"},
            {id : 2, libelle : "Alain"},
            {id : 3, libelle : "Robert"},
            {id : 4, libelle : "Susette"},
            {id : 5, libelle : "Bernard"},
            {id : 6, libelle : "Cerise de Groupama"}
        ],
        tabLength = ( tabValue.length <= tabLibelle.length ) ? ( tabValue.length ) : ( tabLibelle.length ),
        tabResult = [];
     
    for ( let i = 0; i < tabLength; i++ ){
        tabResult.push( { "id" : tabLibelle[ i ][ "libelle" ], "valeur" : tabValue[ i ][ "valeur" ] } );
    }
     
    console.log( tabResult );

  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
    euuh... merci ...
    mais je ne comprends pas très bien ce code ! (je suis débutant JS)
    Qu'est-ce que let ? (il y a très peu de doc dessus ou sinon j'ai mal cherché)
    En l'adaptant à mon code, j'obtiens l'erreur suivante : "Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode" et je ne la comprends pas très bien non plus...

    Merci d'avance pour le coup de main

    ----------------
    EDIT :

    Ok je viens de comprendre let ! (Je l'ai quand même remplacé par var pour une question de lisibilité et d'adaptation à mon code)
    Du coup ça marche très bien sauf dans le cas où j'ai un tab value avec un id pas forcément incrémenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        tabValue = [
            {id : 1, valeur : "85"},
            {id : 2, valeur : "41"},
            {id : 3, valeur : "15"},
            {id : 5, valeur : "124"}
        ],
    et là la valeur "124" se retrouve avec le libelle de la valeur 4 et non de la valeur 5 ...

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    "let" c'est du JS 2015, le JS d'aujourd'hui.

    Dans ce code, pour les navigateurs obsolètes, il suffit de remplacer "let" par un "var".

    Le code est basique, pour le comprendre il n'y a pas d'autre solution que d'apprendre les fondamentaux du langage.

    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
    var
        tabValue = [
            {id : 1, valeur : "85"},
            {id : 2, valeur : "41"},
            {id : 3, valeur : "15"},
            {id : 4, valeur : "124"}
        ],
        tabLibelle = [
            {id : 1, libelle : "Michel"},
            {id : 2, libelle : "Alain"},
            {id : 3, libelle : "Robert"},
            {id : 4, libelle : "Susette"},
            {id : 5, libelle : "Bernard"},
            {id : 6, libelle : "Cerise de Groupama"}
        ],
        tabLength = ( tabValue.length <= tabLibelle.length ) ? ( tabValue.length ) : ( tabLibelle.length ),
        tabResult = [];
     
    for ( var i = 0; i < tabLength; i++ ){
        tabResult.push( { "id" : tabLibelle[ i ][ "libelle" ], "valeur" : tabValue[ i ][ "valeur" ] } );
    }
     
    console.log( tabResult );

  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
    Ah c'est pour ça qu'il y a peu de doc et/ou tuto dessus ! Bon sang, je débute à peine en dev JS et je suis déjà obsolète ! ^^'
    Du coup j'ai édité mon commentaire précédent, je ne sais pas si tu l'as vu mais j'ai un problème avec la correspondance des ID...Du coup je ne sais pas si une boucle for peut vraiment aider ! :/

    (je me suis un peu braqué sur le let mais effectivement le reste est basique)

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 678
    Points
    44 678
    Par défaut
    Bonjour,
    je n'aurais pas eu la même approche.

    Attendu que je comprends que c'est l'objet tabLibelle qui doit être enrichi avec les données de tabValue, je commencerais par créer un objet objId comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* préparation du tableau d'index ARRAY -> JSON */
    var i, objId = {};
    for( i in tabValue){
        objId[tabValue[i]['id']] = tabValue[i]['valeur'];
    }
    pour ensuite affecter les valeurs dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var i, id;
    for( i in tabLibelle){
      id = tabLibelle[i]['id'];
      tabLibelle[i]['valeur'] = objId[id] ? objId[id] :null;
    }
    en cas d’absence d'id la valeur est mise à null pour garder de la cohérence aux objets.

    Mille excuses pour les (for( var...in))

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par FloCAD Voir le message
    Du coup ça marche très bien sauf dans le cas où j'ai un tab value avec un id pas forcément incrémenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        tabValue = [
            {id : 1, valeur : "85"},
            {id : 2, valeur : "41"},
            {id : 3, valeur : "15"},
            {id : 5, valeur : "124"}
        ],
    et là la valeur "124" se retrouve avec le libelle de la valeur 4 et non de la valeur 5 ...
    Logique ! J'ai construis mon code en fonction de votre question et des codes qui y sont donnés (il n'y a pas de trou dans les ID).

    Pour apprendre le JS, il y a MDN

    Mais pour approfondir le sujet ou avoir accès aux dernières nouveautés, il faut consulter les sources anglophones.

    Pour débuter avec ES2015 (aussi appelé ES6), je vous conseille Getting started with ECMAScript 6

    Puis de lire : Exploring ES6

Discussions similaires

  1. assigner dynamiquement les valeurs aux attributs d'un objet
    Par buffalo974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/03/2014, 14h06
  2. Réponses: 2
    Dernier message: 20/01/2014, 22h05
  3. [MySQL] affichage de valeurs d'attributs à partir d'un tableau
    Par PeaceMind dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 12/08/2012, 14h06
  4. Affecter une valeur d'attribut d'un objet à un autre
    Par wafiwafi dans le forum Général Java
    Réponses: 9
    Dernier message: 19/08/2011, 11h38
  5. Tableau de valeurs dans un objet et tableau d'objets
    Par emilie_t dans le forum Flash
    Réponses: 1
    Dernier message: 16/06/2007, 17h22

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