Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在循环中一次迭代多个数字_Javascript - Fatal编程技术网

Javascript 在循环中一次迭代多个数字

Javascript 在循环中一次迭代多个数字,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循环。

如何一次迭代一个循环超过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循环。这样,它会在迭代结束时评估条件

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中使用回调,就像执行一个只有一个参数的函数一样。这可能不清楚…将函数作为参数传递给其他函数是一个困难的概念!