2013-05-30 197 views
1

如何一次遍歷循環多於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; 
} 
+2

在你測試完**之後,你可以在循環**內增加「k」。將'console.log()'調用移至增加「k」的那一行之前。 – Pointy

+0

@Pointy然後'i = 99 j = 100 k = 98' –

+1

一眼就可以看出你需要迭代次數可以被1,2整除,或者你需要檢查而不是遍歷所有三次迭代如果您超出了所需的迭代次數,則返回值 –

回答

2

其中許多答案都是很好的答案。然而,如果循環的極限(本例中爲100)不能被每次迭代的項數(此例中爲3)整除,那麼這些答案都不會提供包含最後(非完整)迭代的解決方案。換句話說,答案中的非答案記錄爲「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); }); 
+0

真棒,謝謝! –

+0

你爲什麼要提出一個尚未宣佈的論點? '... function(itemIndecies){...}' –

+1

'mutlipleItemsForLoop'有三個參數。第三個參數'callback'需要一個函數。因此,我正在傳遞一個函數:'function(itemIndecies){console.log(itemIndecies); }'作爲'multipleItemsForLoop'的'callback'參數。你會注意到我傳遞的函數需要一個參數。您可以通過查看'multipleItemsForLoop'中的'callback'來了解爲什麼。我們在'multipleItemsForLoop'中使用'callback',通過執行它就像一個具有一個參數的函數。這可能並不明確......傳遞函數作爲其他函數的參數是一個困難的概念! –

1

如果我理解正確你的問題,你希望它停止k達到> 100

之前,如果是這樣的更改,而循環進入do ... while循環。這樣,它會在迭代結束時評估條件。

do{ 
     j = i+1; 
     console.log(i+' '+j+' '+k); 
     k = i+2; 
     i = i+3; 
} while (k<100); 
+0

但仍然記錄101? – Bergi

+0

@Bergi編輯:) –

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 
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); 
} 
+0

注意,這隻記錄0 - 98.這可能不是OP想要的。我們無法從他的問題中得知... –