Javascript 在循环中一次迭代多个数字
如何一次迭代一个循环超过1个索引,并在最高索引达到某个数字时停止? 但无法将其转换为javascriptJavascript 在循环中一次迭代多个数字,javascript,Javascript,如何一次迭代一个循环超过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; } 如果我正确理解了您的问题,您希望它在k达到>100之前停止 如果是这样,请将while循环更改为do。。。while循环。
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;
}
如果我正确理解了您的问题,您希望它在k达到>100之前停止 如果是这样,请将while循环更改为do。。。while循环。这样,它会在迭代结束时评估条件
do{
j = i+1;
console.log(i+' '+j+' '+k);
k = i+2;
i = i+3;
} while (k<100);
如果我正确理解了您的问题,您希望它在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);
}
也许你想要更多的形式
var i, j, k = 0;
while (k < 99) {
k = (j = (i = k + 1) + 1) + 1;
console.log('i', i, 'j', j, 'k', k);
}
好像你想要
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);
}
好像你想要
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);
}
这些答案中有很多都是很好的答案。然而,如果在这种情况下循环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); } );
这些答案中有很多都是很好的答案。然而,如果在这种情况下循环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。将console.log调用移动到增加k的行之前。@Pointy,然后i=99 j=100 k=98乍一看,似乎需要迭代次数可以被1、2整除,或者如果超过所需的迭代次数,则需要进行检查以避免对所有三个值进行迭代。您到底希望看到什么?你增加变量的方式真的很奇怪。@Pointy我试图一次用3个索引号通过循环。我有一个数组,我想引用3个项目,每个循环通过测试后在循环中增加k。将console.log调用移动到增加k的行之前。@Pointy,然后i=99 j=100 k=98乍一看,似乎需要迭代次数可以被1、2整除,或者如果超过所需的迭代次数,则需要进行检查以避免对所有三个值进行迭代。您到底希望看到什么?你增加变量的方式真的很奇怪。@Pointy我试图一次用3个索引号通过循环。我有一个数组,并希望引用3个项目每个循环passNote,这只记录0-98。这可能不是OP想要的。但我们不能从他的问题中看出…注意,这只记录了0-98。这可能不是OP想要的。但我们无法从他的问题中看出…你为什么要提出一个尚未声明的论点。。。FunctionItemIndicates{…}mutlipleItemsForLoop有三个参数。第三个参数callback需要一个函数。因此,我将传入一个函数:function itemIndecies{console.logitemindices;}作为multipleItemsForLoop的回调参数。您会注意到我传入的函数需要一个参数。您可以通过查看我们如何在multipleItemsForLoop中使用回调来了解原因。我们在multipleItemsForLoop中使用回调,就像执行一个只有一个参数的函数一样。这可能不清楚…将函数作为参数传递给其他函数是一个困难的概念!你为什么要提出一个尚未声明的论点。。。FunctionItemIndicates{…}mutlipleItemsForLoop有三个参数。第三个参数callback需要一个函数。因此,我将传入一个函数:function itemIndecies{console.logitemindices;}作为multipleItemsForLoop的回调参数。您会注意到我传入的函数需要一个参数。您可以通过查看我们如何在multipleItemsForLoop中使用回调来了解原因。我们在multipleItemsForLoop中使用回调,就像执行一个只有一个参数的函数一样。这可能不清楚…将函数作为参数传递给其他函数是一个困难的概念!