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 :

Construire une array � plusieurs niveaux


Sujet :

JavaScript

  1. #1
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par d�faut Construire une array � plusieurs niveaux
    Bonjour,

    Je suis toujours emb�t� avec ceci

    J'aimerais faire un array � plusieurs niveaux. Je r�colte des donn�s tel que celles ci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    0: Object { unit: "V", station_longname: "Anenomètre", chartContainer: "ba", … }
    1: Object { unit: "Degré", station_longname: "Anenomètre", chartContainer: "di", … }
    2: Object { unit: "%", station_longname: "Anenomètre", chartContainer: "hu", … }
    3: Object { unit: "kPa", station_longname: "Anenomètre", chartContainer: "pr", … }
    4: Object { unit: "W/m2", station_longname: "Anenomètre", chartContainer: "ra", … }
    5: Object { unit: "C", station_longname: "Anenomètre", chartContainer: "te", … }
    6: Object { unit: "an", station_longname: "Anenomètre", chartContainer: "pl", … }
    7: Object { unit: "km/h", station_longname: "Anenomètre", chartContainer: "vi", … }
    Mais je ne peux utiliser que des paires. Donc je dois regrouper ceci par paire. L'id�e est de les regrouper ainsi
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    0: Object { unit: "V", station_longname: "Anenomètre", chartContainer: "ba", … }
    5: Object { unit: "C", station_longname: "Anenomètre", chartContainer: "te", … }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    2: Object { unit: "%", station_longname: "Anenomètre", chartContainer: "hu", … }
    3: Object { unit: "kPa", station_longname: "Anenomètre", chartContainer: "pr", … }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    1: Object { unit: "Degré", station_longname: "Anenomètre", chartContainer: "di", … }
    7: Object { unit: "km/h", station_longname: "Anenomètre", chartContainer: "vi", … }

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    4: Object { unit: "W/m2", station_longname: "Anenomètre", chartContainer: "ra", … }
    Je veux donc cr�er un array qui pourrait resembler � ceci

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    var data = []
    datas[0] = mes deux premieres paires
    datas[1] = mes deux suivantes paires
    datas[2] = les deux suivantes paires
    datas[3] = le derniere

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    datas[0] = Object { unit: "V", station_longname: "Anenomètre", chartContainer: "ba", … }, Object { unit: "C", station_longname: "Anenomètre", chartContainer: "te", … }

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    datas[1] = Object { unit: "%", station_longname: "Anenomètre", chartContainer: "hu", … }, Object { unit: "kPa", station_longname: "Anenomètre", chartContainer: "pr", … }

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    datas[2] = Object { unit: "Degré", station_longname: "Anenomètre", chartContainer: "di", … },Object { unit: "km/h", station_longname: "Anenomètre", chartContainer: "vi", … }
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    datas[3] = Object { unit: "W/m2", station_longname: "Anenomètre", chartContainer: "ra", … }

    Je commence par faire ceci

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    console.log("data:",data);
    var datas = [];
    for(var len in Object(data)){
       console.log("obj data: ", data[len].chartContainer);
    }

    Et c'est la que je bug. J'ai essay� de faire ceci

    Code javascript : 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
     
    console.log("data:",data);
    var datas = [];
    for(var len in Object(data)){
       console.log("obj data: ", data[len].chartContainer);
       for(var len in Object(data)){
                        console.log("obj data: ", data[len].chartContainer);
     
                        if(data[len].chartContainer == 'ba' || data[len].chartContainer == 'te' ){
                            datas[len].push(data[len]);
                        }
     
                        if(data[len].chartContainer == 'hu' || data[len].chartContainer == 'pr' ){
                            datas[len].push(data[len]);
                        }
     
                        if(data[len].chartContainer == 'vi' || data[len].chartContainer == 'di' ){
                            datas[len].push(data[len]);
                        }
     
                        if(data[len].chartContainer == 'ra' ){
                            datas[len].push(data[len]);
                        }
     
     
             }
    }

    Ca bug � ce niveau
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    datas[len].push(data[len]);
    Uncaught TypeError: datas[len] is undefined
    Pourtant, je l'ai bien d�fini plus haut? non?


    Voyez-vous? aveu vous besoins d'info suppl�mentaires?

  2. #2
    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 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    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 659
    Billets dans le blog
    1
    Par d�faut
    Parcoure ton objet pour pusher dans ton array ..
    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 !

  3. #3
    Mod�rateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    comment sont r�cup�r�es les donn�es, sous forme d'un Array d'objets ou une suite d'objets re�u en � rafale � ?

  4. #4
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par d�faut
    Bonjour � tous

    Je fais une requte ajax

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    return $.ajax({
                url: 'https://aaa.aa-aa.ch/api/aaaaa.php', 
                type: 'POST',
                data:'y-axis-0=5&y-axis-1=2&'+params, 
                //data:'type[]=2&'+station,                                  // data: { pond: pond, from: from, to: to },
                cache: false,
                dataType: 'json',
     
                // xhr For testing
                xhr: function () {
                    var xhr = $.ajaxSettings.xhr();
                    xhr.onprogress = function e() {
                      // For downloads
                        if (e.lengthComputable) {
                            console.log("Download ", e.loaded / e.total);
                        }
                    };
     
                    xhr.upload.onprogress = function (e) {
                        // For uploads
                        if (e.lengthComputable) {
                            //$("#field").find('#container-station-' + item).children('.chartLoading').show(1);  
                        }
                    };
                    return xhr;
                },
     
                error: function (data) {
     
                    console.log("Error getting datas from DB.");
                    //console.log("Data",data);
     
     
                },
                success: function (data) {   
                    console.log("data:",data);
               }
    })
    Et j'ai tout dans data,

    0: Object { unit: "V", station_longname: "Anenom�tre", chartContainer: "ba", � }
    1: Object { unit: "Degr�", station_longname: "Anenom�tre", chartContainer: "di", � }
    2: Object { unit: "%", station_longname: "Anenom�tre", chartContainer: "hu", � }
    3: Object { unit: "kPa", station_longname: "Anenom�tre", chartContainer: "pr", � }
    4: Object { unit: "W/m2", station_longname: "Anenom�tre", chartContainer: "ra", � }
    5: Object { unit: "C", station_longname: "Anenom�tre", chartContainer: "te", � }
    6: Object { unit: "an", station_longname: "Anenom�tre", chartContainer: "pl", � }
    7: Object { unit: "km/h", station_longname: "Anenom�tre", chartContainer: "vi", � }
    Apr�s est justement comment parcourir data. J'ai r�ussi � faire un truc, mais je je trouve pas trop galant.
    Ca me semble etre plus de la bricole

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    console.log("data:",data);
    var d_atas = new Array(4);
    for (var i = 0; i < 4; i++)
    {
        d_atas[i] = [];
    }
     
     for(var len in Object(data)){
                        console.log("obj data: ", data[len].chartContainer);
     
                        if(data[len].chartContainer == 'ba'){
                            d_atas[0][0] = data[len];
                        }
     
                        if(data[len].chartContainer == 'te'){
                            d_atas[0][1] = data[len];
                        }
     
                        if(data[len].chartContainer == 'hu'){
                            d_atas[1][0] = data[len];
                        }
     
                        if(data[len].chartContainer == 'pr' ){
                            d_atas[1][1] = data[len];
                        }
     
                        if(data[len].chartContainer == 'vi'){
                            d_atas[2][0] = data[len];
                        }
     
                        if(data[len].chartContainer == 'di' ){
                            d_atas[2][1] = data[len];
                        }
     
                        if(data[len].chartContainer == 'ra' ){
                            d_atas[3][0] = data[len];
                        }
     
     
                    }
    console.log("datas: ", d_atas);
    R�sultat de d_atas:
    Nom : Screenshot 2021-03-22 at 15.46.14.png
Affichages : 165
Taille : 175,0 Ko

    Le truc c'est que j'ai des station qui n'ont que deux sondes, donc le code d_atas donnera

    Nom : Screenshot 2021-03-22 at 15.51.43.png
Affichages : 165
Taille : 98,2 Ko

  5. #5
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par d�faut
    Tu peux placer les chartContainer avec les index de ton tableau de r�sultat correspondants comme des pairs clef/valeur dans une Map.

    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
    29
    const data = {
        0: { unit: "V", station_longname: "Anenomètre", chartContainer: "ba"},
        1: { unit: "Degré", station_longname: "Anenomètre", chartContainer: "di"},
        2: { unit: "%", station_longname: "Anenomètre", chartContainer: "hu"},
        3: { unit: "kPa", station_longname: "Anenomètre", chartContainer: "pr"},
        4: { unit: "W/m2", station_longname: "Anenomètre", chartContainer: "ra"},
        5: { unit: "C", station_longname: "Anenomètre", chartContainer: "te"},
        6: { unit: "an", station_longname: "Anenomètre", chartContainer: "pl"},
        7: { unit: "km/h", station_longname: "Anenomètre", chartContainer: "vi"}
    };
     
    const rules = new Map([
        ['ba', 0], ['te', 0],
        ['hu', 1], ['pr', 1],
        ['vi', 2], ['di', 2],
        ['ra', 3]
    ]);
     
    const result = [[], [], [], []]; // on construit à l'avance avec des tableaux
                                     // vides les index qui seront remplis.
     
    for (const plen in data) {
        const cc = data[plen].chartContainer;
     
        if ( rules.has(cc) )
            result[rules.get(cc)].push(data[plen]);
    }
     
    console.log(result);

  6. #6
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par d�faut
    mm, c'est int�ressant, je vais regarder ce soir. Merci

Discussions similaires

  1. R�ponses: 2
    Dernier message: 19/06/2008, 18h23
  2. Plusieurs niveaux dans une CGauge
    Par Ju2Pom dans le forum C++Builder
    R�ponses: 0
    Dernier message: 17/12/2007, 17h45
  3. R�ponses: 4
    Dernier message: 06/08/2007, 10h10
  4. Construire une chaine avec plusieurs espaces vides
    Par imane_bennouna dans le forum Langage
    R�ponses: 10
    Dernier message: 04/08/2006, 09h29

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