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

    while(childrens.length ! ==0) { 

      do something 

    } 
} 

// Execute this function fnName() 

我在這裏的問題是越來越執行while條件,但是當長度變爲零...它不出來......並執行fnName()雖然條件沒有得到終止

+2

發佈演示問題的「工作」代碼,而不是僞代碼。 – RobG 2012-04-03 10:49:23

+0

必須是'!=='。嘗試< or > – kommradHomer 2012-04-03 10:50:10

回答

4

如果你實際上是從循環中的數組中刪除孩子,那應該沒問題,除了你在操作符上有間距錯誤;它應該是!==,不! ==

while(childrens.length !== 0) { 

注意,實際上從數組中刪除的孩子,你必須使用數組賦值函數的方法之一,如popsplice。我的猜測是你沒有這樣做。

比較正常的事情通過數組做將循環,不變異是:

var index, len, child; 

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

或者使用新的ES5的東西像forEach(需要知道你的用戶將有非常新TO-最新的瀏覽器,或包括「ES5墊片」,因爲forEach是可以勻的東西)之一:

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

邊注:「孩子們」字已經一個複數(單數是「孩子」),所以在它的結尾沒有「s」。只是英語中的一個不規則複數(有幾個)。

+0

FWIW,'while(ar.length!== 0);'實際上是'SyntaxError',而不是無限循環! – Matt 2012-04-03 10:54:57

+1

@Matt:的確如此。我只是說,其他的錯字... – 2012-04-03 11:04:47

1

對於檢查不等於零它應該是

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

如果這是一個錯字,另一個問題可能是你沒有遞減while循環中的子項。因此,它走向了一個無限循環。

2

通常的策略是創建兒童作爲一個數組或類似的對象,它具有一致的屬性,該屬性在進入循環時進行檢查,該條件在條件爲真時繼續。

在這種情況下,這將是最好創建兒童作爲陣列,則在環路中,從而減小它:

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

所以當childrens.length是零,則測試爲假,並且退出循環(或者如果childrens.length從零開始,則從不輸入)。