[Javascript] Recursieve aanroep in for-loop

Pagina: 1
Acties:

  • Stephan11117
  • Registratie: Mei 2004
  • Laatst online: 10-04 16:20
Eerst mijn code:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
find_conditionset: function(id) {
        if(id == 0) {
            return filter.mainConditionSet;
        }
        for(var i=0;i<this.conditionSets.length;i++){
           if(this.conditionSets[i].id == id)
           {
                  alert('found');              
                  return this.conditionSets[i];
           }
           else
           {
               this.conditionSets[i].find_conditionset(id);
           }
        }
    },

De methode find_conditionset is onderdeel van de klasse ConditionSet en is bedoeld om de subConditionSet van de huidige ConditionSet te retourneren met het juiste id.

Blijkaar gaat er iets fout in de recursiviteit omdat er altijd null gereturnd wordt. De popup 'found' verschijnt vreemdgenoeg wel.

Wie ziet de fout?

[ Voor 7% gewijzigd door Stephan11117 op 30-11-2005 17:11 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:16

crisp

Devver

Pixelated

omdat je in je else de returnvalue niet opvangt en weer terug returned.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
find_conditionset: function(id) {
        if(id == 0) {
            return filter.mainConditionSet;
        }
    var foundCondition = null;
        for(var i = 0; foundCondition === null && i < this.conditionSets.length; i++){
           if(this.conditionSets[i].id == id)
           {
                  foundCondition = this.conditionSets[i];
           }
           else
           {
               foundCondition = this.conditionSets[i].find_conditionset(id);
           }
        }
        return foundCondition;
    },

zoiets zou wellicht beter werken ;)

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 15-04 09:54

André

Analytics dude

Misschien even een break; plaatsen na je return regel ;)

/edit: wat crisp zegt bedoel ik dus....

[ Voor 28% gewijzigd door André op 30-11-2005 16:50 ]


  • Stephan11117
  • Registratie: Mei 2004
  • Laatst online: 10-04 16:20
Vriendelijk bedankt! :)

  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03

bvp

crisp schreef op woensdag 30 november 2005 @ 16:49:
omdat je in je else de returnvalue niet opvangt en weer terug returned.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
find_conditionset: function(id) {
        if(id == 0) {
            return filter.mainConditionSet;
        }
    var foundCondition = null;
        for(var i = 0; foundCondition === null && i < this.conditionSets.length; i++){
           if(this.conditionSets[i].id == id)
           {
                  foundCondition = this.conditionSets[i];
           }
           else
           {
               foundCondition = this.conditionSets[i].find_conditionset(id);
           }
        }
        return foundCondition;
    },

zoiets zou wellicht beter werken ;)
Even voor mijzelf, waarom werkt het niet als je in het if { } statement de waarde teruggeeft?
Bij een return zou hij toch al uit de function / method moeten gaan?
Of werkt dat niet zo bij javaScript?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:16

crisp

Devver

Pixelated

Omdat je de returnvalue door de hele stack terug moet geven: stel dat je 3e stacklevel uiteindelijk een waarde returned, dan ga je terug naar je 2e stacklevel, en die gaat weer terug naar je 1e stacklevel. Die waarde moet je dus elke keer weer mee terug nemen zodat uiteindelijk je 1e call hem ook weer terug kan geven.
Dat is niet iets speciaals van javascript hoor, maar hoe recursie in het algemeen werkt.

[ Voor 13% gewijzigd door crisp op 01-12-2005 18:19 ]

Intentionally left blank


  • Daos
  • Registratie: Oktober 2004
  • Niet online
bvp schreef op donderdag 01 december 2005 @ 15:27:
[...]


Even voor mijzelf, waarom werkt het niet als je in het if { } statement de waarde teruggeeft?
Bij een return zou hij toch al uit de function / method moeten gaan?
Of werkt dat niet zo bij javaScript?
Jawel, maar dan moet je het wel intypen.

Zoiets dus:
JavaScript:
13
               return this.conditionSets[i].find_conditionset(id);


1 return op het eind is overzichtelijker en makkelijker te debuggen.
Pagina: 1