我如何一次遍历一个循环超过 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;
}
我如何一次遍历一个循环超过 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;
}
其中许多答案都是很好的答案。但是,如果循环的限制(在这种情况下为 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);
}