一次遍历一个循环多个数字

时间:2013-05-30 00:49:37

标签: javascript

我如何一次遍历一个多于1个索引的循环,并在最高索引达到一定数量时停止?
I saw this article但无法将其转换为javascript。

var i,j,k;
i = j = k = 0;
while(k<100){
    j = i+1;
    k = i+2;
    console.log(i+' '+j+' '+k); // k reaches 101
    i = i+3;  
}

4 个答案:

答案 0 :(得分:2)

其中许多答案都是很好的答案。然而,如果循环的限制(在这种情况下为100)不能被每次迭代的项目数(在这种情况下为3)整除,则这些答案都不提供包含最后(非完整)迭代的解决方案。换句话说,OP的答案记录为“99”。所以我添加了一个满足这个标准的解决方案,并且对于任何限制或itemsPerIteration是通用的,其中limit和itemsPerIteration是自然数。

function multipleItemsForLoop(limit, itemsPerIteration, callback) {
    var loop = function(i) {
        var numItemsThisIteration = Math.min(limit - i, itemsPerIteration);
        if(numItemsThisIteration <= 0) {
            return;
        }
        var itemIndecies = [];
        for(var x = 0; x < numItemsThisIteration; x++) {
            itemIndecies.push(i+x);
        }

        callback(itemIndecies);

        loop(i+itemsPerIteration > limit && numItemsThisIteration === itemsPerIteration ? i + 1 : i + itemsPerIteration);
    }

    loop(0);
}

multipleItemsForLoop(100, 3, function (itemIndecies) { console.log(itemIndecies); } );

答案 1 :(得分:1)

如果我理解你的问题,你希望它在k到达之前停止&gt; 100。

如果是这样,将while循环更改为do ... while循环。这样,它会在迭代结束时评估条件。

do{
        j = i+1;
        console.log(i+' '+j+' '+k);
        k = i+2;
        i = i+3;
} while (k<100);

答案 2 :(得分:1)

也许你想要更多的形式

var i, j, k = 0;
while (k < 99) {
    k = (j = (i = k + 1) + 1) + 1;
    console.log('i', i, 'j', j, 'k', k);
}

所以你得到了

i 1 j 2 k 3
i 4 j 5 k 6
...
i 97 j 98 k 99

答案 3 :(得分:1)

好像你想要

var i = 0,
    j = 1,
    k = 2;
while (k < 100) {
    console.log(i+' '+j+' '+k);
    i += 3;
    j += 3;
    k += 3;
}

或者,更简洁,在for循环中:

for (var i=0, j=1, k=2; k < 100; k=1+(j=1+(i+=3))) {
    console.log(i+' '+j+' '+k);
}

然而,通常你不会使用三个变量。相反,只需要它

for (var i=0; i<100-2; i+=3) {
    console.log(i+' '+(i+1)+' '+(i+2));
}
// or
for (var k=2; k<100; k+=3) {
    console.log((k-2)+' '+(k-1)+' '+k);
}