2017-08-10 5 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

このdoesntのは、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) 
関連する問題