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 :

Iterer dans un tableau dimensionnel pour ajouter une valeur a chaque index


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2017
    Messages : 20
    Points : 25
    Points
    25
    Par défaut Iterer dans un tableau dimensionnel pour ajouter une valeur a chaque index
    Bonjour à tous !

    J'ai créé un tableau dimenseionnel permettant de rentrer une suite de valeur dans plusieurs tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    0: ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"]
    1: ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"]
    J'aimerais maintenant comparait chaque valeur avec la precedente afin d'afficher une tendance sur chaque valeur qui seront ensuite mis en forme dans une datatable en gros il faudrait que ca ressemble à ça :

    Nom : exemple tableau comparaison.png
Affichages : 132
Taille : 5,3 Ko

    J'ai tenter de faire quelque chose comme ca (je n'ai essayer que pour une tendance a la baisse pour le moment) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Boucle sur la premiere dimension
    for (var i=0, len=valeurLigne.length; i<len; i++) {
     
                        // Boucle qui demarre à l'index 1 car le premier éléments du tableau est le titre de la ligne
                        for (var j=1, len2=valeurLigne[i].length; j<len2; j++) {
     
                            if (valeurLigne[j-1] > valeurLigne[j - 2]) {
                                 valeurLigne.splice(j,0,"down") }
     
                        }
     
                    }
    Mais ca ne fonctionne evidemment pas, j'ai ensuite tenter tout un tas de combiansion mais rien y fait, je m'en remet donc à vous en vous remerciant pour tout conseil ou aide eventuelle

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Ben tu ne nous as pas donné le code JS de "valeurLigne" je parle de sa déclaration entière, je soupçonne que ce soit un objet comme ça :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var valeurLigne = {
     
        0: ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"],
        1: ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"]
    }

    Si oui eh bien ceci valeurLigne.length ne te renvoi pas la taille de l'objet contrairement à ce que tu sembles croire, ça renvoi "undefined"... Par contre valeurLigne[0].length ou valeurLigne[1].length renvoi 12.

    ---> Pour obtenir la taille de l'objet "valeurLigne" : Object.keys(valeurLigne).length;...

    Il y a un fil où ce sujet a été discuté... Il faudrait que je le retrouve...

    ---> Pour le reste le problème est de savoir où tu veux stocker l'information "down" ou "up", ça c'est à toi de voir comment tu veux gérer le reste de ton code... Il faudrait un cas concret, est-ce que tu veux afficher cela dans une table par exemple...

    J'ai l’impression au vu du code que tu voudrais un truc comme ça : { 0: ["1187735", "1206451", "up", "1211549", "up",... ??? Ça me semble un peu compliqué car la taille du tableau va varier (augmenter) durant l’exécution de la boucle mais bon... Ce serait peut-être mieux de fabriquer un autre objet pour stocker ces infos...

  3. #3
    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


    Exemple :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    let oDatas = {
        serie1: {
            ar: ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"],
            tendance: [],
        },
        serie2: {
            ar: ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"],
            tendance: []
        },
    };
     
    for (const key in oDatas) {
     
        // debug, console, touche F12
        //console.log(oDatas[key].ar, oDatas[key].tendance);
     
        let
            prevValue = Number(oDatas[key].ar[0]),
            newValue = 0;
     
        for (const [i, item] of oDatas[key].ar.entries()) {
            newValue = Number(item);
     
            if (newValue - prevValue === 0) {
                oDatas[key].tendance[i] = 'same';
            } else if (newValue > prevValue) {
                oDatas[key].tendance[i] = 'up';
            } else if (newValue < prevValue) {
                oDatas[key].tendance[i] = 'down';
            } else {
                throw new Error('impossible');
            }
     
            // debug
            //console.log(prevValue, newValue, oDatas[key].tendance[i]);
     
            prevValue = newValue;
        }
     
        // debug
        console.log(oDatas[key].ar);
        console.log(oDatas[key].tendance);
        console.log('-------');
     
        /*
        ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"]
        ["same", "up", "up", "up", "up", "down", "up", "down", "up", "up", "up", "down"]
        -------
        ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"]
        ["same", "down", "down", "down", "up", "up", "down", "up", "up", "up", "down", "up"]
        */
     
    }

    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.)

  4. #4
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Je vois que Daniel a réarranger la structure d'une manière plus lisible mais si ce n'est pas ce qu'on a au départ alors il faudra ajouter une fonction qui transforme la structure de départ vers celle de Daniel.

    Dans tous les cas je pense toujours que serait mieux de fabriquer un autre objet (tableau) pour stocker les infos "up"/"down", ici Daniel l'a appelé "tendance"...

    ---> Intéressant Daniel a utilisé une boucle "for in" du coup plus besoin de connaitre la taille de l'objet ce dont on a besoin avec une boucle for classique...

    ------------------
    Citation Envoyé par Beginner. Voir le message
    Ben tu ne nous as pas donné le code JS de "valeurLigne" je parle de sa déclaration entière, je soupçonne que ce soit un objet comme ça :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var valeurLigne = {
     
        0: ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"],
        1: ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"]
    }

    Si oui eh bien ceci valeurLigne.length ne te renvoi pas la taille de l'objet...
    Je me suis rendu compte aprés que ça pourrait être un tableau de tableau (ce que certains appellent tableau à deux dimensions) :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var valeurLigne = [];
    valeurLigne[0] = ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"] ;
    valeurLigne[1] = ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"] ;
    Dans ce cas valeurLigne.length renvoi bien la taille du tableau (ici 2)...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    ... je pense toujours que serait mieux de fabriquer un autre objet (tableau)...
    1- Il n'est pas très compliqué de modifier le code de danielhagnoul pour ça :
    • oDatas : les données
    • oTrends : les tendances

    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
    let oDatas = {
        0: ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"],
        1: ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"]
    };
    let oTrends = []; // array : tableaux des tendances
     
    for (const key in oDatas) {
     
        oTrends[key] = []; // c est aussi un array
        let
            prevValue = Number(oDatas[key][0]),
            newValue = 0;
     
        for (const [i, item] of oDatas[key].entries()) {
            newValue = Number(item);
     
            if (newValue - prevValue === 0) {
                oTrends[key][i] = 'same';
            } else if (newValue > prevValue) {
                oTrends[key][i] = 'up';
            } else if (newValue < prevValue) {
                oTrends[key][i] = 'down';
            } else {
                throw new Error('impossible');
            }
     
            prevValue = newValue;
        }
     
        // debug
        console.log(oDatas[key]); // données pour la clé key
        console.log(oTrends[key]); // tendances pour la clé key
        console.log('-------');
     
    }

    Citation Envoyé par Beginner. Voir le message
    ...Je vois que Daniel a réarranger la structure d'une manière plus lisible mais si ce n'est pas ce qu'on a au départ ....
    2- On peut aussi arriver au même résultat * que danielhagnoul (un seul array) à partir de ton tableau initial (valeurLigne que j'ai rebaptisé oInits) :
    • oDatas (array associant les valeurs et les tendances) est construit au fur et à mesure.

    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
    42
    43
    let oInits = {
        0: ["1187735", "1206451", "1211549", "1218620", "1225111", "1218447", "1237192", "1225536", "1229807", "1254001", "1261973", "1251097"],
        1: ["1347", "1154", "798", "169", "429", "866", "102", "511", "767", "5104", "2216", "3062"]
    }
    let oDatas = []; // array associant les valeurs et les tendances
     
    for (const key in oInits) {
     
       // l array oDatas est construit au fur et à mesure...
        oDatas[key] = [];
        oDatas[key].ar = [];
        oDatas[key].tendance = [];
     
        oDatas[key].ar[0] = oInits[key][0];
     
    	let
            prevValue = Number(oDatas[key].ar[0]),
            newValue = 0;
     
        for (const [i, item] of oInits[key].entries()) {
            newValue = Number(item);
     
            oDatas[key].ar[i] = oInits[key][i];
     
          if (newValue - prevValue === 0) {
                oDatas[key].tendance[i] = 'same';
            } else if (newValue > prevValue) {
                oDatas[key].tendance[i] = 'up';
            } else if (newValue < prevValue) {
                oDatas[key].tendance[i] = 'down';
            } else {
                throw new Error('impossible');
            }
     
            prevValue = newValue;
        }
     
        // debug
        console.log(oDatas[key].ar);
        console.log(oDatas[key].tendance);
        console.log('-------');
     
    }
    * La différence est que 'serie1', 'serie2' sont remplacés par les indices '0', '1'.
    Dernière modification par Invité ; 05/08/2018 à 09h10.

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci.
    Oui il y a plusieurs façons de faire.

    Avec tout ça Hemoroide devrait être satisfait...

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

Discussions similaires

  1. [XL-2010] probleme d'usage de match/index/cell pour ajouter une valeur
    Par micamused dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/03/2016, 18h15
  2. Réponses: 1
    Dernier message: 22/02/2015, 23h38
  3. Bouton pour ajouter une valeur à un autre
    Par Loukas42 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/09/2011, 08h25
  4. Réponses: 2
    Dernier message: 05/03/2008, 22h01
  5. Réponses: 1
    Dernier message: 12/03/2007, 14h53

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