2016-05-03 8 views
0

Ich habe zwei if-Anweisungen. Man setzt this.node auf das nächste Geschwister des Elternknotens und das andere setzt this.node (rekursiv) auf das letzte Kind des nächsten Knotens.Wie überspringe ich die nächste if-Anweisung ohne Rückgabe?

if (!this.node.nextSibling) { 
    this.node = findParentNode(this.node).nextSibling 
} 
if (this.node.nextSibling) { 
    this.node = findNode(this.node.nextSibling) 
} 

Von Zeit zu Zeit werden die beiden if-Anweisung einander aftect, mit anderen Worten, wird man laufen und die dann ein anderer ausgeführt wird. Ich kann return nicht benutzen, weil das die ganze Funktion stoppt (es gibt mehr Code unten).

Wie man es macht, so stören sich beide Aussagen nicht gegenseitig?

+2

@ sp00m das ist nicht unbedingt korrekt, weil der Körper des ersten 'if' * * this.node ändert. * Vielleicht * sollte es ein "else" sein, aber es ist nicht klar, was das OP machen will. – Pointy

+2

Sie müssen Ihre Frage klären, weil ich nicht glauben kann, dass Sie 13,6k Reputation hier haben, und Sie nicht vertraut mit if/else Aussagen oder Flags. – vaso123

+1

@lolka_bolka Ich weiß alles über if/else Flags. Außer, wie man zwei davon abhält, ohne eine 'return'- und eine 'else'-Anweisung auszuführen. – alexchenco

Antwort

3

Warum nicht eine else-Anweisung verwenden, die beide kombiniert?

if (!this.node.nextSibling) { 
    this.node = findParentNode(this.node).nextSibling 
} else { 
    this.node = findNode(this.node.nextSibling) 
} 
+3

Ich würde wahrscheinlich Logik umkehren, um zu vereinfachen. Keine Notwendigkeit, einen "Nicht" -Operator zu verwenden. – isherwood

+0

Was passiert, wenn er den this.node in der ersten Anweisung überschreibt? Danach könnte der zweite auch wahr sein, also versuche herauszufinden, was OP eigentlich will. – vaso123

3

Sie können einfach eine Variable definieren, um zu bestimmen, ob Sie in den zweiten, wenn Block wie so gehen sollte:

var wasProcessed = false; 

if (!this.node.nextSibling) { 
    this.node = findParentNode(this.node).nextSibling 
    wasProcessed = true; 
} 
if (!wasProcessed && this.node.nextSibling) { 
    this.node = findNode(this.node.nextSibling) 
} 
+0

Danke. Dies ist eine gute Lösung. – alexchenco

1

Sie auch ELSE Teil des Stroms (Erste IF) setzen kann, dass IF-Bedingung .

if (!this.node.nextSibling) { 
     this.node = findParentNode(this.node).nextSibling 
    } 
    else 
    { 
     if (this.node.nextSibling) { 
     this.node = findNode(this.node.nextSibling) 
     } 
    } 
Verwandte Themen