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 :

Parcours de tableau imbriqué


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 17
    Points
    17
    Par défaut Parcours de tableau imbriqué
    bonjour à tous,

    je doit afficher les valeurs de tableau imbriqué et j'ai des problème de mise en oeuvre car l'algorithme doit pouvoir afficher n'importe quel configuration sachant que :
    - les 2 premiers indices d'un tableau contiennent forcément des string .
    - les indices suivant contiennent 0 ou n tableaux du même type.

    alors, voici mon code de teste avec des valeurs qui facilite le débogage :

    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
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    var log = console.log;
     
    var tab = 
    ["1","1",	["11","11",	["111","111",
    					["1111","1111"],
    					["1112","1112"],
    					["1113","1113"]
    				],
    				["112","112",
    					["1121","1121"],
    					["1122","1122"]
    				]
    		],
    		["12","12",	
    			["121","121"],
    			["122","122"]
    		]
    ];
     
     
    function printTab(tab) {
     
    	var original = tab; 
    	var PreviousTab = tab;
    	var j = 3;
     
    		while(tab) {
    			var k=3;
    			while (tab){
    				log(tab[0],tab[1]);
     
    				if(tab[2]) {	//s'il existe un tableau imbriqué 
    					previousTab = tab;
    					tab = tab[2];	//on entre dedans
    				} else {
    					tab = previousTab[k]; //sinon on entre dans le tableau voisin
    					k = k + 1;
    				}
    			}
    		  tab = original[j]; //sinon on repare du début avec un indice incrementé
    		  j = j+1;
    		}
     
    		log('\n');
     
    	return tab
    }
     
    printTab(tab)
    et en sortie j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    1 1
    11 11
    111 111
    1111 1111
    1112 1112
    1113 1113
    12 12
    121 121
    122 122
    mais il a omis 112 et sont contenue . comment je pourrais règler ce problème ?

    merci d'avance
    bonne journée et à bientôt

  2. #2
    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
    Salut !
    Il doit y avoir un problème d'algo. Voici une solution possible avec une fonction récursive.
    Si tu as des questions, n'hésite pas

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    var tab = [  
          "1",
          "1",
          [  
            "11",
            "11",
            [  
              "111",
              "111",
              [  
                "1111",
                "1111"
              ],
              [  
                "1112",
                "1112"
              ],
              [  
                "1113",
                "1113"
              ]
            ],
            [  
              "112",
              "112",
              [  
                "1121",
                "1121"
              ],
              [  
                "1122",
                "1122"
              ]
            ]
          ],
          [  
            "12",
            "12",
            [  
              "121",
              "121"
            ],
            [  
              "122",
              "122"
            ]
          ]
        ],
        stringResultat = '';
     
    // fonction récursive qui parcoure le tableau passé en paramètre
    // Si l'élément est de type "string" : on l'affiche.
    // Si l'élément est de type "array" : on affiche un saut de ligne et on parcourt le tableau avec la même fonction
    function parcourirTableau(arr) {
      var i, len;
     
      for (i = 0, len = arr.length ; i < len ; i++) {
        if (typeof arr[i] === "string") {
          stringResultat += arr[i] + ' ';
        } else if (typeof arr[i] === "object" && (arr[i] instanceof Array)) {
          stringResultat += '\n';
          parcourirTableau(arr[i]);
        }
      }
    }
     
    // Lancement de la fonction
    parcourirTableau(tab);
    console.log(stringResultat);

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 17
    Points
    17
    Par défaut
    merci beaucoup , ça semble beaucoup plus simple que ce que j'éssayais de faire mais je ne comprend pas .
    ta fonction me semble presque magique car logiquement , quand tu fais parcourirTableau(arr[i]) , arr devient arr[i] dans ta fonction . donc à chaque itération tu monte d'un cran dans l'imbrication et il ne devrait pas pouvoir redescendre . bref il devrait afficher :
    11 11
    111 111
    1111 1111
    alors qu'il m'affiche tout les tableaux comme je le voulais .

  4. #4
    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
    Ce n'est pas magique, c'est de la récursivité
    Grâce à la boucle (for) et à la fonction récursive (parcourirTableau) placée à l'intérieur, il va parcourir tous les éléments de chaque niveau.

    La boucle (for) permet de parcourir tous les éléments "frères" (au même niveau).
    La fonction récursive permet de parcourir tous les éléments fils (les niveaux d'en dessous).

  5. #5
    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 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    en testant si l'item est un 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 !

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    C'est important la différence entre un saut de ligne et un espace ? Parce que si l'objectif est de simplement lister toutes les valeurs, un tab.toString() suffit.
    One Web to rule them all

  7. #7
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Points : 17
    Points
    17
    Par défaut
    merci bien , je pense avoir compris . il faut pensé à toute les fonctions imbriqué alors que je pensais à un genre de goto qui renverais au début de la fonction .. c'est le problème quand on débute la récursivité , il faut raisonner différement .

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

Discussions similaires

  1. [MySQL] affichage de tableau imbriqué résultant de requêtes
    Par jniarrivepa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/03/2007, 12h31
  2. Tableau de tableau (imbriqué) dynamique
    Par kwakanar dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 25/09/2006, 23h08
  3. Code javascript qui parcours un tableau
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/03/2006, 08h46
  4. Parcours de tableau et optimisation
    Par mik007 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 22/11/2005, 09h57
  5. [Debutant(e)]Pb parcours de tableau
    Par joquetino dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 22/09/2004, 09h08

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