2015-07-03 55 views
1

我已經嘗試了以下代碼的多種變體,即在一段時間內交換。我有一個創建並添加到動態的數組。它創建一個空的聯賽表。當我迭代數組並打印出表格時,第一個循環總是返回undefined?我有控制檯記錄了一切,但無法解決原因。我認爲這是關於內部循環變量的問題,但我正在用盡想法。有人可以解釋爲什麼會發生在所有的循環?我已經閱讀了這裏的問題,並且談到了在第一個循環中被視爲字符串的變量,但是不明白。用於打印2d陣列的嵌套for循環。 Ist迭代未定義?

league = []; 

$('#butt').on('click',function(){ 
    var name = $('.input1').val(); 
    x = $('#demo'); 
    x.html(name); 
    person(name,0,0,0,0,0); 
}); 

function person(first,w,d,l,gf,ag) { 
    this.Name = first; 
    this.wins = w; 
    this.draws = d; 
    this.lose = l; 
    this.goalsfor = gf; 
    this.goalsag =ag; 
    newTeam = new Array  

    (this.Name,this.wins,this.draws,this.lose,this.goalsfor,this.goalsag); 


    league.push(newTeam); 
    teamRow = league[0][0]; 
    makeLeague(); 
} 

function makeLeague(){ 

    var tableStart = "<table>" 
    var tableEnd = "</table>" 
    var tableMid ; 
    var secondtab = $('#demo1'); 

    leagueSize = league.length; 

    console.log("league length is " + league.length); 

    for(k=0; k<league.length; k++){ 
     tableMid += "<tr>"; 
     for(i=0; i< 6; i++){ 
      tableMid += "<td> " + league[k][i] + "</td>"; 
     } 
     tableMid += "</tr>"; 
    } 

    secondtab.html(tableStart + tableMid + tableEnd); 
} 

回答

1

您使用person作爲一個正常的功能時,它應該被用來作爲一個構造函數。嘗試使用new person(name, 0, 0, 0, 0, 0);代替(也可能將其存儲到變量中)。

另外,作爲John Sheridan mentions,您還需要初始化您的tableMid變量,然後才能將其附加到它,如下所示:var tableMid = "";

下面是代碼的清理版本。請注意您應該包含的var聲明,以避免範圍問題。

var league = []; 

$('#butt').on('click', function() { 
    var name = $('.input1').val(); 
    var x = $('#demo'); 
    x.html(name); 
    var person = new Person(name, 0, 0, 0, 0, 0); 
}); 

function Person(first, w, d, l, gf, ag) { 
    this.Name = first; 
    this.wins = w; 
    this.draws = d; 
    this.lose = l; 
    this.goalsfor = gf; 
    this.goalsag = ag; 
    var newTeam = [this.Name, this.wins, this.draws, this.lose, this.goalsfor, this.goalsag]; 

    league.push(newTeam); 
    var teamRow = league[0][0]; 
    makeLeague(); 
} 

function makeLeague() { 
    var tableStart = "<table>"; 
    var tableEnd = "</table>"; 
    var tableMid = ""; 
    var secondtab = $('#demo1'); 

    for (var k = 0; k < league.length; k++) { 
     var team = league[k]; 
     tableMid += "<tr>"; 
     for (var i = 0; i < team.length; i++) { 
      tableMid += "<td> " + team[i] + "</td>"; 
     } 
     tableMid += "</tr>"; 
    } 

    secondtab.html(tableStart + tableMid + tableEnd); 
} 
+0

這並沒有解決這個問題(直到你的編輯)的人已經改變。謝謝 –

1

在你的makeLeague()函數中,你應該在+ =操作中使用它之前初始化tableMid。

var tableMid ='';

沒有這個tableMid是未定義的。

+0

謝謝,這工作。我聲明變量。爲什麼這還不夠。另外它是如何被定義並添加到它的。或者它只是添加到一個未定義的變量。我在每個循環週期都不會得到未定義的嗎? –

+0

JavaScript中的所有變量都是未定義的,除非您爲它們指定了某些內容。您的+ =操作也可以寫成tableMid = tableMid +「」。由此可以看出,您正在嘗試讀取未定義的變量。 –

0

您的錯誤來自league.length在for循環處爲0。 那就是爲什麼循環永遠不會執行,所以tableMid是未定義的。

您在啓動初始化聯賽

league = []; 

,它使非全局變量。 與

var league[]; 

在啓動,應該工作初始化。 此外,您需要使用空字符串來初始化tableMid,如John Sheridan提到的,否則添加將失敗,因爲未定義。

var tableMid = ""; 

DEMO

[編輯] SRY錯誤的鏈接