我如何一次遍历一个多于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;
}
答案 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);
}