繁体   English   中英

一次循环遍历多个数字

[英]iterate through a loop multiple numbers at a time

如何一次遍历一个以上的索引并在最高索引达到某个数字时停止循环?
我看到了这篇文章,但无法将其翻译成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;  
}

这些答案很多都是好的答案。 但是,如果循环的极限(在这种情况下为100)不能被每次迭代的项目数(在这种情况下为3)可整除,则这些答案都不能提供解决方案,其中包括最后一次(非完全)迭代。 换句话说,OP的答案中没有一个记录为“ 99”。 因此,我添加了一个满足此条件的解决方案,适用于任何limit或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); } );

如果我正确理解了您的问题,则希望它在k达到> 100之前停止。

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

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

也许您想要更多形式的东西

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

好像你要

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM