2015-11-05 92 views
-1

我想遍歷一個數組,並在某些情況下需要減少我的計數器。JavaScript - 是否可以遞減循環內的計數器?

我的目標是將div重新排列成固定高度的兩列。

它看起來像這樣:

var divs = document.getElementsByTagName('div'); 

for(var i = 0; i < divs.length; i++) { 
    if(left column is not full) { 
     left.append(divs[i]); 
    } 
    else if(right column is not full){ 
     right.append(divs[i]); 
    } 
    else { 
     create 2 new columns (left & right); 
     i--; //so that the element doesn't get lost 
    } 
} 

我沒有在一個無限循環結束了,但結果並不完全符合我的預期。在我的邏輯中是否有錯誤,或者是不可能/不允許在循環中遞減計數器?

+2

操縱循環內的循環變量是可能的。你期望什麼樣的行爲,你確切地看到了什麼行爲? – Philipp

+0

它是有效的代碼,但大多數情況下這是沒有意義的,或使代碼難以閱讀。 – Altoyyr

+1

這聽起來像是一個XY問題。我很難想到這個用例... – zanderle

回答

-1

你可以遞減for循環中的計數器,但你會發現很難跟蹤它們。對於你的情況,最好使用while循環。

這個怎麼樣:

var i = 0; 
while(i < length) { 
    if(a) { 
     //do something 
     i++; 
    } 
    else { 
     //do something else 
     i--; 
    } 
} 
+0

爲什麼downvote? – svarog

3

這是一個不好的做法,在循環中修改的計數器。代替使用while。然後您將能夠定義您的自定義計數器修改邏輯。

例如,代碼段使用以下算法下面從數組中刪除所有負項:

  • 如果一個項目是正 - 繼續
  • 否則,在適當的位置中刪除項目i

無法使用for循環而無需附加陣列或手動計數器遞減,因爲for循環會在每次刪除一個循環後跳過該值,因此無法執行此操作。

var items = [0, 3, 5, -3, -5, -7, 11]; 
 

 
var i = 0; 
 

 
while (i < items.length) { 
 
    if (items[i] < 0) 
 
    items.splice(i, 1); 
 
    else 
 
    i++; 
 
} 
 

 
document.body.innerText = JSON.stringify(items);