1

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

4 回答 4

2

其中许多答案都是很好的答案。但是,如果循环的限制(在这种情况下为 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); } );
于 2013-05-30T02:04:54.747 回答
1

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

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

do{
        j = i+1;
        console.log(i+' '+j+' '+k);
        k = i+2;
        i = i+3;
} while (k<100);
于 2013-05-30T01:02:16.283 回答
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
于 2013-05-30T01:05:42.547 回答
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);
}
于 2013-05-30T01:06:49.753 回答