2016-03-05 150 views
0

一個循環訪問參數我有3個循環從嵌套循環的Javascript

$.each(results.doc, function(index, element){ 
       for(var i=0; i < self.options.maxMatches; i++){ 
        var RealCategory = this.data[0]['realcategories'][i]; 
        var realcategoryName = RealCategory.name; 
        for(var j = 0; j< RealCategory.tournaments.length; j++){ 
         var tournamentName = RealCategory.tournaments[j].name 
         self.append('<li>' + realcategoryName+'/'+i+' - '+tournamentName+'/'+j+' </li>'); 
        } 
       }; 
      }); 

self.options.maxMatches我決定多少結果將我顯示HTML。假設self.options.maxMatches=10RealCategory.tournaments.length>0出現問題。比我從第三和第二回路得到的結果。如果第三個循環讓我2結果我得到我的HTML 10 + 2結果,但我不想它只是10個結果。

+0

我只能看到兩個'for'循環。你有沒有把每個都算作第三個? –

+0

是的,我的意思是每個是一個循環和兩個循環,抱歉,如果它是不可理解的寫。 – userDC

+0

@ k-nut,'$ .each'本質上是一個循環包裝器。它循環遍歷第一個參數中的元素並在每個元素上執行該函數,因此它在技術上是一個循環。 –

回答

2

如果你想頂多maxMatches一些<li> S(或tournaments),那麼你」我想要保留一個單獨的計數器與任何索引器並退出循環。

var limit = self.options.maxMatches; 
$.each(results.doc, function() { 
    // ... 
    for (var i = 0; i < categories.length; i++) { 
     // ... 
     for (var j = 0; j < RealCategory.tournaments.length; j++) { 
      // ... 

      limit--; 
      if (limit <= 0) { 
       // exit iterator `function`, interrupting both `for` loops 
       // `false` to instruct jQuery to not continue looping 
       return false; 
      } 
     } 
    } 
}); 

maxMatches目前僅限制realcategories數量。但是,每個人都有一個未知數tournaments(可能是0,可能是5等)。

2所可能出現的情況:

i    | 0 | 1 | 2 | 3 | 4 | (e.g. maxMatches = 5) 
tournaments (A) | 3 | 0 | 1 | 2 | 1 | (total = 7) 
tournaments (B) | 0 | 1 | 1 | 0 | 0 | (total = 2) 
+0

非常感謝你,感謝你,並向我展示如何做到這一點。唯一的一點是它應該是(var j = 0; j userDC

+0

@userDC啊。對不起,錯字。謝謝你指出。 –

+0

謝謝你的解決方案@Jonathan Lonowski – userDC

0

試試這個,這是一個快速修復。我遞增烏爾變量「我」在內環(雖然這個代碼可以在很多寫更好的方法)

$.each(results.doc, function(index, element){ 
       for(var i=0; i < self.options.maxMatches;){ 
        var RealCategory = this.data[0]['realcategories'][i]; 
        var realcategoryName = RealCategory.name; 
        for(var j = 0; j< RealCategory.tournaments.length; j++){ 
         i++; 
         var tournamentName = RealCategory.tournaments[j].name 
         self.append('<li>' + realcategoryName+'/'+i+' - '+tournamentName+'/'+j+' </li>'); 
        } 
       }; 
      }); 
+0

我已經嘗試過,並沒有工作。如果我輸入10個結果,我會得到7個。請問你能說出如何以更好的方式寫出來嗎?我想學習編寫更好的代碼。 – userDC

+0

參考@jonathan Lonowski的解決方案上面..你可以使用這樣的限制標誌。您也可以調整結果的json /數組結構。從代碼看,它可能會使用一些重組。 –

+1

謝謝@Taran J,我相信它可以用於很多重組。我仍在學習編程,這就是爲什麼我感謝你們提供的每一個提示或解決方案。 – userDC