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 :

Undefined : Fonction qui retourne un tableau


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Par défaut Undefined : Fonction qui retourne un tableau
    Bonjour,

    J'essaye de retourner un tableau, mais dans la console de debug, cela m'indique undefined.
    Cà doit être une erreur toute bête mais je ne vois pas comment la corriger.

    J'ai donc une fonction récursive qui me recherche dans un tableau un noeud et dés qu'il le trouve il me le retourne.
    Fonction de recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function RechercheNoeud(indicateurParent, id){
        if(indicateurParent){
            $.each(indicateurParent['indicateurSuivant'], function (key, enfant){
                if(enfant['id'] === id){
    console.debug(enfant);
                    return enfant;
                } else {
                    RechercheNoeud(enfant, id);
                }
            });
     
        } else return null;
    }
    Mon Debug m'indique bien qu'il a trouvé mon noeud.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ({id:1, libelle:"Indicateur 1 n1", valeur:2, poids:1, evolution:0, indicateurSuivant:[{id:12, libelle:"Indicateur 4 n2", valeur:1, poids:1, evolution:null, indicateurSuivant:[]}, {id:32, libelle:"Indicateur 5 n2", valeur:3, poids:1, evolution:null, indicateurSuivant:[{id:33, libelle:"Indicateur 6 n3", valeur:3, poids:2, evolution:null, indicateurSuivant:[]}, {id:34, libelle:"Indicateur 7 n3", valeur:3, poids:1, evolution:null, indicateurSuivant:[]}]}]})
    Fonction qui appelle RechercheNoeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function DescendreIndicateur(key, idParent){
        alert(idParent);
        var idSecteur=tabStatistique[key]['id'];
    console.debug(tabStatistique[key]);
        var indicateurParent = RechercheNoeud(tabStatistique[key], idParent);
    console.debug(indicateurParent);
        if(indicateurParent !== null){
            $("#tab2_" + idSecteur).remove();
            var newElementTab2=ChargementDivContenu(indicateurParent, idSecteur, key, 0, false);    
     
            $("#div4_" + idSecteur).append(newElementTab2);
        }
    }
    Le premier debug m'affiche mon tableau que je recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ({id:1, libelle:"Action sociale", indicateurSuivant:[{id:1, libelle:"Indicateur 1 n1", valeur:2, poids:1, evolution:0, indicateurSuivant:[{id:12, libelle:"Indicateur 4 n2", valeur:1, poids:1, evolution:null, indicateurSuivant:[]}, {id:32, libelle:"Indicateur 5 n2", valeur:3, poids:1, evolution:null, indicateurSuivant:[{id:33, libelle:"Indicateur 6 n3", valeur:3, poids:2, evolution:null, indicateurSuivant:[]}, {id:34, libelle:"Indicateur 7 n3", valeur:3, poids:1, evolution:null, indicateurSuivant:[]}]}]}, {id:27, libelle:"Indicateur 1 n2", valeur:1, poids:1, evolution:1, indicateurSuivant:[]}, {id:28, libelle:"Indicateur 1 n3", valeur:1, poids:1, evolution:-1, indicateurSuivant:[{id:13, libelle:"Indicateur 3 n2", valeur:1, poids:1, evolution:null, indicateurSuivant:[]}]}, {id:29, libelle:"Indicateur 1 n4", valeur:0, poids:1, evolution:0, indicateurSuivant:[]}, {id:30, libelle:"Indicateur 1 n5", valeur:0, poids:1, evolution:0, indicateurSuivant:[]}, {id:31, libelle:"Indicateur 1 n6", valeur:1, poids:1, evolution:0, indicateurSuivant:[]}]})
    Le deuxieme le résultat UNDEFINED

    Avez vous une idée svp?

  2. #2
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    else {
       RechercheNoeud(enfant, id);
    }
    Ce ne serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    else {
       return RechercheNoeud(enfant, id);
    }

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Par défaut
    Sans le return la fonction fonctionne, je viens de tester avec mais je ne vois aucun changement.
    A tester sur l'id suivant de mon tableau car la il ne fait pas d'appel recursive avec l'id=1.

    Par contre je viens de trouver un début de solution, une erreur toute conne.
    Comme j'utilise Jquery, il faut que je face un var monTab = $.each(...) et retourner la variable monTab.
    Mais ca ne marche toujours pas

  4. #4
    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
    Par défaut
    Ce n'est pas parce que tes messages de debug apparaissent que la fonction fonctionne. Il faut faire remonter le résultat au cycle parent, c'est une base de la récursivité.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Par défaut
    Si tu fais un return, la fonction récursive ne s'arrête pas et transmet pas le résultat à la fonction qui l'a appelé?

    En Php ca fonctionne ainsi.

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Par défaut
    Bon j'ai finalement trouvé, une bonne nuit de sommeil ca remet les idées en place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function RechercheNoeud(indicateurParent, id){
        if(indicateurParent){
            var enfant1 = [];
            $.each(indicateurParent['indicateurSuivant'], function (key, enfant){
                if(enfant['id'] === id){
                    enfant1 = enfant;
                } else {
                    RechercheNoeud(enfant, id);
                }
            });
            return enfant1;
        } else return false;
    }

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

Discussions similaires

  1. [Tableaux] Fonction qui retourne un tableau
    Par benooiit dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 01h50
  2. Réponses: 6
    Dernier message: 22/09/2006, 18h17
  3. Fonction qui retourne un tableau ou 2 variables ? possible ou non
    Par jiojio dans le forum VB 6 et antérieur
    Réponses: 45
    Dernier message: 05/06/2006, 15h00
  4. [VB] Fonction qui retourne un tableau
    Par ptitsoleil87 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/12/2005, 10h52
  5. Fonction qui retourne un tableau
    Par _lara_ dans le forum ASP
    Réponses: 6
    Dernier message: 24/05/2004, 15h06

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