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 :

Objet Map et ajout seconde valeur à la clé


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut Objet Map et ajout seconde valeur à la clé
    Bonjour,
    En partant de mon code existant ci dessous, je me pose plusieurs questions

    Voici le code ( 100% fonctionnel )
    Code JS : 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
    25
    26
    27
    28
    29
    30
    31
    32
    var myMap = new Map();
    var ttwLast = "T+ 0:00";
    var twaLast = null;
     
    function space(val) {
        if (val < 10) {
            val = " " + val;
        }
        return val;
    }
     
    function genIteNext (ttwCurr) {
        var ttwCurr = ttwCurr.match(/.*?([0-9]{1,3}):([0-9]{2})/);
        var ttwNext = [];
        if ((parseFloat(ttwCurr[2]) + 10) < 60) {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1])) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10)).slice(-2);
        } else {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1]) + 1) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10) % 60).slice(-2);
        }
        return ttwNext;
    }
     
    for (var i = 0; i < points.length; i++) {
        while (points[i].ttw !== ttwLast) {
            twaMap.set (ttwLast, twaLast);
            ttwLast = genIteNext(ttwLast);
        }
        twaLast = points[i].twa;
        ttwLast = points[i].ttw;
        myMap.set(points[i].ttw, points[i].twa);
    }
    console.log(myMap);

    Ce code me génère une map ayant pour clé ttw et pour valeur twa.

    J'ai besoin d'une autre map ayant pour clé ttw et pour valeur btw, je peux la créer assez facilement en modifiant quelques petites choses mais j'aimerais éviter les répétitions.
    Je sais que nativement, il n'est pas possible de générer une map avec une clé et deux valeurs.

    La première question est via une librairie additionnelle est il possible de générer une map sous la forme (clé, valeur1, valeur2) ce qui pour moi donnerait (ttw, twa, btw) ce qui serait assez facile à mettre en oeuvre dans le code ci dessus.

    La seconde question est si oui ou je peux trouver cette librairie ?

    La troisième et dernière question, est ce que en voulant me simplifier la vie je suis pas en train de faire tout l'inverse et que je ferais mieux de rester sous forme de tableau ?

    Merci

  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 : 73
    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


    Mais la valeur de la Map peut être un String, un Number, un Object ou un Array ! Et un Array peut contenir une ou plusieurs valeurs.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    dans une valeur d'un objet Map, vous pouvez stocker un objet standard qui contient 2 valeurs comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    myMap.set(
          "clé"
        ,
        {
            "val1" : 77,
            "val2" : 1234,
        }
    );

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Ok merci pour les renseignements je vais regarder ça de plus près ce soir, je maitrise pas l'architecture du truc mais je vais me renseigner

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Comme je m'y attendais c'est pas aussi simple ...

    Voila le code que je test, je dois me craquer quelque part mais à première vue comme ça je vois pas ...

    Code JS : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    var myMap = new Map();
    var ttwLast = "T+ 0:00";
    var twaLast = null;
    var btwLast = null;
     
    function space(val) {
        if (val < 10) {
            val = " " + val;
        }
        return val;
    }
     
    function genIteNext (ttwCurr) {
        var ttwCurr = ttwCurr.match(/.*?([0-9]{1,3}):([0-9]{2})/);
        var ttwNext = [];
        if ((parseFloat(ttwCurr[2]) + 10) < 60) {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1])) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10)).slice(-2);
        } else {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1]) + 1) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10) % 60).slice(-2);
        }
        return ttwNext;
    }
     
    for (var i = 0; i < points.length; i++) {
        while (points[i].ttw !== ttwLast) {
            myMap.set (ttwLast, {twaLast, btwLast} );
            ttwLast = genIteNext(ttwLast);
        }
        ttwLast = points[i].ttw;
        twaLast = points[i].twa;
        btwLast = points[i].btw;
        myMap.set(points[i].ttw, {points[i].twa, points[i].btw} );
    }
    console.log(myMap);

    Ça paraissait plutôt simple sur le papier mais non c'était trop beau ...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    La prochaine fois au lieu de partir tête baissée comme un fou furieux j'prendrais le temps de lire correctement l'exemple qu'on me donne ...

    Code JS : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    var myMap = new Map();
    var ttwLast = "T+ 0:00";
    var twaLast = null;
    var btwLast = null;
     
    function space(val) {
        if (val < 10) {
            val = " " + val;
        }
        return val;
    }
     
    function genIteNext (ttwCurr) {
        var ttwCurr = ttwCurr.match(/.*?([0-9]{1,3}):([0-9]{2})/);
        var ttwNext = [];
        if ((parseFloat(ttwCurr[2]) + 10) < 60) {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1])) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10)).slice(-2);
        } else {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1]) + 1) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10) % 60).slice(-2);
        }
        return ttwNext;
    }
     
    for (var i = 0; i < points.length; i++) {
        while (points[i].ttw !== ttwLast) {
            myMap.set (ttwLast, {twaVal : twaLast, btwVal : btwLast} );
            ttwLast = genIteNext(ttwLast);
        }
        ttwLast = points[i].ttw;
        twaLast = points[i].twa;
        btwLast = points[i].btw;
        myMap.set(points[i].ttw, {twaVal : points[i].twa, btwVal : points[i].btw} );
    }
    console.log(myMap);

    Fait correctement ce que je souhaite, merci danielhagnoul et mathieu

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/03/2015, 20h33
  2. ajouter une valeur d'une clé dans une map
    Par chirazch dans le forum C++
    Réponses: 7
    Dernier message: 06/05/2013, 19h36
  3. Prob de lecture des valeurs de l'objet map
    Par micanti dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 12/07/2006, 21h38
  4. Prob de lecture des valeurs de l'objet map
    Par micanti dans le forum Struts 1
    Réponses: 12
    Dernier message: 12/07/2006, 18h12
  5. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 14h41

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