JavaScript - 是否可以在for循环中减少计数器?

时间:2015-11-05 10:21:31

标签: javascript arrays for-loop counter decrement

我正在尝试迭代一个数组,在某些情况下需要减少我的计数器。

我的目标是将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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-1)

你可以减少for循环中的计数器,但你会发现很难跟踪它们。对于你的情况,使用while循环更好。

怎么样:

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