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écupération de clé d'un tableau associatif dans un nouveau tableau


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Récupération de clé d'un tableau associatif dans un nouveau tableau
    Bonjour à tous

    J'ai actuellement un tableau associatif finalTabPointsY qui me renvoie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cle = "2" Y = 7
    cle = "5" Y = 8
    cle = "6" Y = 9
    cle = "3" Y = 2
    cle = "4" Y = 2
    J'aimerais récupérer les clés dans un nouveau tableau simple qui donnerait ceci :
    tableauCles [2,5,6,3,4]

    Et faire de meme pour les valeurs de Y:
    tableauY [7,8,9,2,2]

    J'ai passé pas mal de temps à faire des recherche mais rien de ce que j'ai trouvé ne répondait vraiment à mon problème ...

    D'avance merci si vous avez une solution ou même une idée !

    Bien à vous,
    Simon

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    J'ai actuellement un tableau associatif
    C'est pas possible : les tableaux associatifs n'existent pas en JavaScript !
    D'où ta question du coup.

    Si tu travailles sur des navigateurs récents, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object.keys(finalTabPointsY);
    sinon, il faudra boucler sur les entrées de ton objet (boucle for...in) pour alimenter ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var result = [];
    for(var cle in finalTabPointsY){
        result.push(cle);
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci la seconde solution est parfaite !

    Par contre, quand je fais un affichage des valeurs elles apparaissent entourée de double quotes, et le parseInt(...) ne fonctionne pas, mais il me faut absolument des valeurs entières et non des String, est-ce faisable ?

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.write(finalTabPointsX);
    Résultat :
    Et je désirerai donc :

    Désolé pour mes questions, je débute avec le JavaScript et m'y perd un peu n'y étant pas assez habitué et peut être trop habitué au Java et C# ...

  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 112
    Points
    44 112
    Par défaut
    Bonjour,
    et le parseInt(...) ne fonctionne pas
    il serait bon que tu nous montres ta façon de procéder.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(var cle in newTabY){
            finalTabPointsX.push(parseInt(cle));
    }

  6. #6
    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 112
    Points
    44 112
    Par défaut
    cela devrait fonctionner même s'il nous manque un peu de code pour voir le contexte

    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
    var mon_objet = {
      'un':    '1',
      'deux':  '2',
      'trois': '3',
      'quatre':'4',
      'cinq':  '5'
    };
    var tInt = [],
        tKey = [];
     
    for( var ind in mon_objet){
      tInt.push( parseInt( mon_objet[ind]));
      tKey.push( ind);
    }
    alert('valeur : ' +tInt +'\n' +'clé : ' +tKey);

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Attention au parseInt qui est par defaut en octal ..
    cela ne devrait pas poser de souci dans ce cas de figure avec les clefs de tableaux
    il faut préciser la base 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tInt.push( parseInt( mon_objet[ind]),10);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre averti Avatar de npuzin
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 265
    Points : 423
    Points
    423
    Par défaut
    non, parseInt est en base 10 par défaut :

    parseInt("10") => 10

    sauf si la chaine commence par "0x" :

    parseInt("0x10") => 16


    http://www.w3schools.com/jsref/jsref_parseint.asp

    If the string begins with "0x", the radix is 16 (hexadecimal)
    If the string begins with "0", the radix is 8 (octal). This feature is deprecated
    If the string begins with any other value, the radix is 10 (decimal)

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Ha ils ont rectifié alors... "autrefois" il suffisait quand la chaine commençait par 0
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Yep sur IE8- :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    parseInt("010"); // 8

    IE9 et autres :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    parseInt("010"); // 10

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    c'est pas beau de vieillir
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Effectivement, ça fait mal si les valeurs ne sont pas pareilles sur les "vieux de la vieille" !

    En fait j'ai ce code exactement :
    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
    24
    25
    26
    27
    28
    function calculPointsSup(tabX, tabY){
        //var newTabX = new Object();
        var newTabY = new Object();
        var premierElement = parseInt(tabX[0]);
        var dernierElement = parseInt(tabX[tabX.length - 1]);
     
     
        for(i = 0;i < tabX.length ; i++){
            //newTabX['"' + tabX[i] + '"'] = parseInt(tabX[i]);
            newTabY['"' + tabX[i] + '"'] = parseInt(tabY[i]);
        }
     
        for(j = premierElement; j <= dernierElement; j++){
            if(!cleExisteDeja(tabX, j)){
                //newTabX['"' + j + '"'] = parseInt(j);
                newTabY['"' + j + '"'] = parseInt("2"); // normalement = Lagrange
            }
        }
     
        // Récupération val clés en String
        for(var cle in newTabY){
            finalTabPointsX.push(cle);
        }
        for(var i in newTabY)
        {
            finalTabPointsY.push(newTabY[i]); 
        } 
    }
    Le but ici est que, à partir d'une liste de points entrés par un utilisateur, je puissé récupérer un tableau "sans trous", je m'explique avec un exemple, l'utilisateur entre ceci :
    tabX [2,5,6] et tabY [7,8,9]

    Je désire obtenir deux nouveaux tableaux de ce type :
    finalTabPointsX = [2,3,4,5,6] et finalTabPointsY = [7,z,z,8,9] (z étant une valeur que je calcule là ou j'ai mon commentaire pour Lagrange et que je remplace actuellement par 2.


    finalTabPointsX contient donc bien les clés mais sous forme de string, j'ai tenté de faire finalTabPointsX.push(parseInt(cle)); Mais la mes réponse sont une suite de NaN ...

    Dans finalTabPointsY par contre j'ai les valeurs "associées" à la clé correspondantes et int, c'est donc exact.

    Tant qu'à faire, voici le résultat actuel des choses :
    Points X (correct) :
    "2","5","6","3","4"
    Points Y (correct) :
    7,8,9,2,2


    newTabY :
    X = "2" et Y = 7
    X = "5" et Y = 8
    X = "6" et Y = 9
    X = "3" et Y = 2
    X = "4" et Y = 2

  13. #13
    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 112
    Points
    44 112
    Par défaut
    Il faut une bonne dose d'aspirine pour comprendre ce que tu cherches à faire

    Je ne prendrais pas le problème sous le même angle, je te l'expose 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
    21
    22
    function calculPointsSup(tabX, tabY){
      var newTabY = {},
          deb = parseInt(tabX[0]),                   // premier indice à traiter
          fin = parseInt(tabX[tabX.length - 1] +1),  // dernier indice à traiter
          nb = tabX.length;
     
      // init de l'objet par défaut en créant les "trous"
      for(i = deb;i < fin ; i++){
        newTabY['"' + i + '"'] = 'not exist'; // mettre la valeur par défaut
      }
     
      // mise en place des valeur connues
      for( i = 0; i < nb ; i++){
        newTabY['"' + tabX[i] + '"'] = parseInt(tabY[i]);
      }
     
      // Récupération val clés en String
      for(var cle in newTabY){
        finalTabPointsX.push(cle);
        finalTabPointsY.push(newTabY[cle]);
      }
    }
    Pas tout compris avec ton usage intensif de parseInt.


    PS
    : concernant parseInt, effectivement j'ai oublier de mettre la base.

    Je pense qu'à l'heure actuelle il est encore préférable de l'indiquer attendu qu'en plus des IE8 et - il y a également
    - Safari 5.1.7
    - Opéra 12.16
    - FireFox 16
    qui ne prennent pas en compte la base 10 par défaut, et il en reste pas mal dans la nature.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Effectivement, ta fonction est plus simple et je me compliquait la vie ! Merci !

    J'ai juste eu à supprimer le +1 à la variable fin (??)


    Voici donc mon résultat actuel (j'ai remplacé not exist pour gain de place par NE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Points X :
    "2","3","4","5","6"
    Points Y : 
    7,NE,NE,8,9
    J'ai supprimé les '"' + [i] + '"' et je récupère tout en int, c'est parfait

    Merci pour ton aide précieuse en tous cas !

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

Discussions similaires

  1. [MySQL] Encodage UTF-8 d'un tableau associatif dans une classe
    Par SaMot91 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/11/2008, 17h43
  2. [Tableaux] Tableau associatif dans un tableau numéroté
    Par laloupiote dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2007, 12h15
  3. Réponses: 3
    Dernier message: 18/01/2007, 12h48
  4. Réponses: 3
    Dernier message: 04/08/2006, 19h24
  5. Réponses: 3
    Dernier message: 12/06/2006, 12h04

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