2015-07-03 51 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错误的链接