2017-08-10 126 views
0

我需要遍歷數組並在需要時向該數組添加更多元素。但coffeescript似乎以舊的方式終止循環(數組在for循環開始時結束)。我需要循環來循環新添加的元素。我該如何解決?Coffeescript - 如何獲得循環來循環數組中的新增元素?

arr = [1,2,3,4,5] 

for x in arr 
    console.log(x + ">>>" + arr)  
    if(x < 3) 
     arr.push(5) 

輸出在控制檯上:

enter image description here

JSFiddle

這似乎沒有在JS一個問題:

arr = [1,2,3,4,5] 

for(i=0 ; i<arr.length ; i++){ 
    console.log(arr[i]); 
    if(arr[i] < 3) 
    arr.push(5) 
} 

在控制檯輸出:

enter image description here

JSFiddle

+3

請勿。不要改變你正在迭代的數據結構。這就是說,*看看JavaScript *。如果你看看編譯器的輸出結果,那麼爲什麼會這樣呢? –

回答

0

不要發生變異你遍歷數組。將算法分割爲多個片段,例如:

arr = [1,2,3,4,5] 
to_add = [] 

# 1. Check for new items to add 
for x in arr 
    if x < 3 
    to_add.push(5) 

# 2. Add the new items 
arr = arr.concat(to_add) 

# 3. Iterate over the array, including the new items  
for x in arr 
    your_thing(x)