在for循环中,如何每隔一次递增一次计数器?

时间:2014-11-04 02:10:04

标签: javascript for-loop increment

我为这个问题的笨拙措辞道歉。英语不是我的第一语言。

我正在创建一个可滚动的列表。此列表的每个元素都包含一个包含两行的列。我不想在每行填充之前偏移列。我基本上只想在for循环的每两个周期增加偏移计数器。我的代码如下:

var j = 0;
for(var i=0;i<localArray.length;i++){
    var iconLeft = 145 * j;

    var div = document.createElement('div');
    div.id              = "page_icon_" + i;
    div.style.position  = "absolute";
    div.style.height    = "45px";
    div.style.width     = "145px";
    div.style.left      = iconLeft + "px";

    var item = fishListItem(localArray[i].info);
    div.appendChild(item);
    var parent = document.getElementById('tut_icons_scroll');

    if(i%2){
        item.style.top = "40px";
        parent.appendChild(div);
    }else{          
        parent.appendChild(div);
    }
    if (i%2) {
        j++;
    }

如果没有引入变量&#39; j&#39;?

,有没有办法处理

6 个答案:

答案 0 :(得分:2)

在这种情况下,您可以将j的所有实例替换为Math.floor(i/2)

答案 1 :(得分:2)

你可以这样做:

Math.floor(i/2)

取代j。

答案 2 :(得分:0)

我想使用纯css nth-child来完成此要求

if(i%2){
    item.style.top = "40px";
    parent.appendChild(div);
}

在您的css div:nth-child(even) { top: 40px; }

中替换它

替换j,只需为列创建一个类,为它设置边距,并将position设置为relative,float设置为left。

您可以在jsbinjsfiddler中提供您的代码,以便我们为您提供帮助。我认为这个解决方案非常清晰,易于维护。

答案 3 :(得分:0)

使用传递元素i然后将(i + 1)用于函数然后向上计数2秒会很容易吗?

类似的东西:

function appendFunction(elementToAdd, addItTo) {}

for (var i = 0; i < localArray.length; i+=2) { 
  var iconLeft = 145*(i%2); // at 0 
  var iconRight = 145*(i%2 + 1); // at 145
  appendFunction(elementToAdd[i], addItTo}
  appendFunction(elementToAdd[i+1], addItTo}
}

不确定该函数是否有很多帮助,但无论如何,在for循环中添加两个并处理(x)和(x + 1)的情况应允许每隔一次递增一次计数器。你必须说每次发生两次,但是你为它做了一个函数,它只需要很长一段时间,并留下一个容易重复使用的位来附加元素以放置文本。

答案 4 :(得分:0)

您可以按照几个答案中的说明使用Math.floor。或者右移一位:

i>>1;

使用此表达式替换j,或使用:var j=i>>1;。对于每个循环,i>>1将具有以下值,并且递增i

0,0,1,1,2,2,3,3,4,4,...

答案 5 :(得分:-1)

试试这个:

for(var i=0, j=0; i < 10; i++%2 && ++j) {
  console.log(i,j);
}