2017-08-10 3 views
0

Ich muss ein Array durchlaufen und bei Bedarf weitere Elemente zu diesem Array hinzufügen. Aber Coffeescript scheint die Schleife mit alter Länge zu beenden (wo das Array endete, als die for-Schleife gestartet wurde). Ich brauche die Schleife, um neu hinzugefügte Elemente zu durchlaufen. Wie behebe ich das?Coffeescript - Wie bekomme ich einen Loop, um über neu hinzugefügte Elemente in einem Array zu loopen?

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

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

Ausgabe auf Konsole:

enter image description here

JSFiddle

Dies scheint nicht ein Problem in js zu sein:

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

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

Ausgabe auf Konsole:

enter image description here

JSFiddle

+3

nicht. Verwandeln Sie nicht die Datenstruktur, die Sie durchlaufen. Das heißt, * schau dir das JavaScript * an. Wenn Sie sich die Compiler-Ausgabe anschauen, wird es sehr offensichtlich, warum sie sich so verhält. –

Antwort

0

Sie das Array nicht mutieren Sie über sind laufen. Teilen Sie Ihren Algorithmus auf mehrere Segmente, z.B .:

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) 
Verwandte Themen