2012-04-03 7 views
1
if(childrens are present) { 

    while(childrens.length ! ==0) { 

      do something 

    } 
} 

// Execute this function fnName() 

Mein Problem ist hier die während Zustand ausgeführt wird immer, aber wenn die Länge Null wird ... es kommt nicht aus ... und führen Sie die fnName()Während Bedingung nicht beendet zu werden

+2

Post "Arbeits" -Code, der das Problem, nicht Pseudo-Code zeigt. – RobG

+0

muss über '! ==' sein. try < or > – kommradHomer

Antwort

4

Wenn Sie tatsächlich Kinder aus dem Array in der Schleife entfernen, sollte das in Ordnung sein, außer dass der Abstand für den Operator falsch ist. es !== sein sollte, nicht ! ==:

while(childrens.length !== 0) { 

anzumerken, dass Sie tatsächlich Kinder aus dem Array entfernt eines der Array Mutatormethoden verwenden, wie pop oder splice. Ich nehme an, dass Sie das nicht tun.

Je mehr normale Sache zu tun, durch die Anordnung zu Schleife wäre es ohne mutiert:

var index, len, child; 

for (index = 0, len = childrens.length; index < len; ++index) { 
    child = childrens[index]; 
    // Use `child` for each child 
} 

Oder die neuen ES5 Sachen wie forEach mit (den Benutzern wissen, erfordert haben einen sehr up-to Datum-Browser oder mit einer „ES5 Scheibe“ da forEach ist eines der Dinge, die) unterfüttert werden kann:

childrens.forEach(function(child) { 
    // Use `child` for each child 
}); 

Randbemerkung: das Wort „Kinder“ ist bereits ein Plural (der Singular ist "Kind"), also gibt es kein "s" am Ende davon. Nur einer von Englischs unregelmäßigen Pluralen (es gibt mehrere).

+0

FWIW, 'while (ar.length! == 0);' ist eigentlich ein 'SyntaxError', anstatt eine Endlosschleife! – Matt

+1

@Matt: In der Tat. Ich habe nur gesagt, andere der Tippfehler ... –

1

Für nicht gleich Überprüfung auf Null es das andere Problem, das Sie Kinder in der while-Schleife nicht sein könnte Wenn dies ein Tippfehler ist

children.length != 0 // (you have written in the question children.length ! ==0) 

sein soll Erniedrigen. Daher geht es in eine Endlosschleife.

2

Die übliche Strategie besteht darin, childrens als ein Array oder ähnliches Objekt zu erstellen, das über eine konsistente Eigenschaft verfügt, die bei Eintritt in die Schleife überprüft wird.

In diesem Fall wäre es am besten Kinder als ein Array zu erstellen, es dann in der Schleife so verringern:

while (childrens.length) { 
    // do stuff to reduce the length of childrens 
} 

Also, wenn childrens.length Null ist, ist der Test falsch ist und die Schleife beendet (oder wenn childrens.length zu Beginn Null ist, wird nie eingegeben).

Verwandte Themen