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 tableau avec sous-tableaux


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Par défaut Parcours tableau avec sous-tableaux
    Bonjour,

    J'aimerais parcourir un tableau qui m'est donné sous la forme suivante par un programme PL/SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [["9226 mesure ECOOL f",0,
     ["9227 mesure ECOOL f",0,
      ["9240 TD62 - Tracés au sol f"],
      ["10872 mesure ECOOL t",0,
       ["10873 mesure ECOOL t"]
      ],
     ],
     ["9228 TD68 f",0,
      ["9241 TD68 - Tracés au sol t"],
      ["10905 mesure ECOOL t",0,
       ["10906 mesure ECOOL t"]
      ]
     ]
    ]]
    Ce tableau représente un arbre, les éléments suivi d'un 0 étant les noeuds.

    J'aimerais retirer tous les éléments qui se terminent par ' f' (en enlevant en plus le 0 si c'est un noeud).

    Par exemple avec le tableau ci-dessus je pense qu'on devrais obtenir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [
     ["10872 mesure ECOOL t",0,
      ["10873 mesure ECOOL t"]
     ],
     ["9241 TD68 - Tracés au sol t"],
     ["10905 mesure ECOOL t",0,
      ["10906 mesure ECOOL t"]
     ]
    ]
    J'ai essayer diverses choses, notamment en fonctions récursives mais j'ai vraiment du mal, une petite aide serait la bienvenue

    Merci.

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Peux-tu nous montrer ce que tu as essayé?

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Par défaut
    Salut,

    J'ai laissé tout le code au bureau.
    Je poste ça demain matin à la première heure.

    Mais SpaceFrog m'a fait un truc pas mal juste après sur le chat, ça fonctionne presque, ya juste 2/3 trucs que je n'arrive pas à règler.

    On vois ça demain !

    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Par défaut
    Le code ®SpaceFrog un poil modifié :

    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
    function recur(arr){
    	this.k=0;
    	for(elt in arr){
    		if (typeof arr[this.k] == "string") { 
    			if (/ f$/.test(arr[this.k])){
    				alert(arr[this.k]);
    				arr.splice(this.k,1);
    				/*if (arr[this.k] == 0)
    					arr.splice(this.k,1);*/
    			}
    		}
    		else {
    			new recur(arr[this.k]);     
    		}
    		this.k++;
    	}
    }
    Le code en commentaire c'est pour enlever le 0 qui suit si c'est un noeud.

    Le alert m'affiche bien un à un tous les éléments finissant par ' f', donc il devrait bien les retirer mais apparement le splice ne fonctionne pas comme je pense...

    Le tableau avant traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    9226 mesure ECOOL f,0,9227 mesure ECOOL f,0,9240 TD62 - Tracés au sol f,10872 mesure ECOOL t,0,10873 mesure ECOOL t,9228 TD68 f,0,9241 TD68 - Tracés au sol t,10905 mesure ECOOL t,0,10906 mesure ECOOL t
    Le tableau après traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0,0,,10872 mesure ECOOL t,0,10873 mesure ECOOL t,0,9241 TD68 - Tracés au sol t,10905 mesure ECOOL t,0,10906 mesure ECOOL t
    D'ailleurs lorsque j'affiche les tableaux remarquez que je perd la hiérarchie, il affiche juste les éléments séparés par des virgules.

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Par défaut
    Bon je dois vraiment être bête, je ne m'en sort pas

    un fichier de test :

    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
    var gReturn = '[["9226 mesure ECOOL f",0,["9227 mesure ECOOL f",0,["9240 TD62 - Tracés au sol f"],["10872 mesure ECOOL t",0,["10873 mesure ECOOL t"]],],["9228 TD68 f",0,["9241 TD68 - Tracés au sol t"],["10905 mesure ECOOL t",0,["10906 mesure ECOOL t"]]]]]';
    var TREE_ITEMS = eval(gReturn);
    alert(TREE_ITEMS);
    recur(TREE_ITEMS);
    alert(TREE_ITEMS);
     
    function recur(arr){
    	for(var k=0;k<arr.length;k++){
    		if (typeof arr[k] == "string") { 		
    			if (arr[k].substr(arr[k].length-2,2) == ' f') {
    				arr.splice(k,1);
    				/*if (arr[k] == 0) {
    					arr.splice(k,1);
    				}*/
    			}
    		}
    		else {
    			new recur(arr[k]); 
    		}
    	}
    }
    A l'aide d'une fonction var_dump pour afficher le tableau (merci supersnail ) j'obtient :

    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
    Array => [
        0: Array => [    
            0: Other: 0
            1: Array => [        
                0: Other: 0
                1: Array => [            
                ]
                2: Array => [            
                    0: String: "10872 mesure ECOOL t"
                    1: Other: 0
                    2: Array => [                
                        0: String: "10873 mesure ECOOL t"
                    ]
                ]
            ]
            2: Array => [        
                0: Other: 0
                1: Array => [            
                    0: String: "9241 TD68 - Tracés au sol t"
                ]
                2: Array => [            
                    0: String: "10905 mesure ECOOL t"
                    1: Other: 0
                    2: Array => [                
                        0: String: "10906 mesure ECOOL t"
                    ]
                ]
            ]
        ]
    ]
    Ce qui est normal (les valeurs finissant par f sont bien supprimées), il faut juste que je supprime les tableaux vides, mais comment faire ? => trouvé

    Par contre si je décommente le if dans la fonction (pour supprimer le 0), j'obtiens :

    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
    Array => [
        0: Array => [    
            0: Array => [        
                0: String: "9227 mesure ECOOL f"
                1: Other: 0
                2: Array => [            
                    0: String: "9240 TD62 - Tracés au sol f"
                ]
                3: Array => [            
                    0: String: "10872 mesure ECOOL t"
                    1: Other: 0
                    2: Array => [                
                        0: String: "10873 mesure ECOOL t"
                    ]
                ]
            ]
            1: Array => [        
                0: Array => [            
                    0: String: "9241 TD68 - Tracés au sol t"
                ]
                1: Array => [            
                    0: String: "10905 mesure ECOOL t"
                    1: Other: 0
                    2: Array => [                
                        0: String: "10906 mesure ECOOL t"
                    ]
                ]
            ]
        ]
    ]
    Donc là ca fait n'importe quoi, il reste des valeurs finissant par f, même si les 0 correspondant aux 2 valeurs qui n'apparaissent pas sont bien supprimés.

    Si vous avez une idée. Merci.

    EDIT : OK j'arrive à supprimer les tableaux vides en ajoutant simplement ceci à la fonction après l'appel récursif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (arr[k].length == 0) {
    	arr.splice(k,1);
    }

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 255
    Par défaut
    Ca y est, en ajoutant dans le ça semble fonctionner, ne me demandez pas pourquoi

    Mais dans tous les cas mon script qui construit correctement l'arbre lorsqu'il n'est pas filtré, n'arrive pas à le construire après ce traitement. La structure obtenue doit être mauvaise (sûrement à cause des array imbriqués), par exemple maintenant j'obtiens ça :

    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
    Array => [
        0: Array => [    
            0: Array => [        
                0: Array => [            
                    0: String: "10872 mesure ECOOL t"
                    1: Other: 0
                    2: Array => [                
                        0: String: "10873 mesure ECOOL t"
                    ]
                ]
            ]
            1: Array => [        
                0: Array => [            
                    0: String: "9241 TD68 - Tracés au sol t"
                ]
                1: Array => [            
                    0: String: "10905 mesure ECOOL t"
                    1: Other: 0
                    2: Array => [                
                        0: String: "10906 mesure ECOOL t"
                    ]
                ]
            ]
        ]
    ]
    Il y a des array inutiles, je pense que c'est la cause.

    Bref j'y reviendrai plus tard quand j'aurai plus de temps car là il faut que j'avance sur d'autres choses. Merci à ceux qui m'ont aidé (SpaceFrog et supersnail).

    à+ !

Discussions similaires

  1. Découpage d'un tableau en sous tableaux
    Par ivan-dev dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2010, 16h22
  2. Tableau avec sous-totaux dans Rave Report
    Par jackvpt dans le forum Rave
    Réponses: 4
    Dernier message: 21/12/2010, 23h53
  3. Creer un 3ème tableau avec 2 tableaux
    Par anxious dans le forum Langage
    Réponses: 10
    Dernier message: 10/12/2009, 18h00
  4. Réponses: 4
    Dernier message: 31/07/2008, 14h39
  5. [Tableaux] Diviser un tableau en sous-tableaux
    Par fayred dans le forum Langage
    Réponses: 5
    Dernier message: 18/03/2008, 16h56

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