嵌套for循环用于打印2d数组。 Ist迭代未定义?

时间:2015-07-03 23:27:08

标签: javascript jquery

我已尝试过以下代码的许多变体,即交换时间。我有一个动态创建并添加的数组。它创建了一个空的联赛表。当我遍历数组并打印出表时,第一个循环总是返回undefined?我有控制台记录了所有内容,但无法解决原因。我认为这与内部循环变量有关,但我的想法已经不多了。有人可以解释为什么这会在所有循环中发生吗?我已经在这里阅读了一些问题,并且有些人谈到在第一个循环中被视为字符串的变量但是不明白。

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

3 个答案:

答案 0 :(得分: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); } 声明,以避免确定范围问题。

from flask import Flask, render_template_string
from wtforms import Form
from wtforms.fields.html5 import DecimalRangeField


app = Flask(__name__)
app.config['DEBUG'] = True

TPL = '''
<!DOCTYPE html>
<html>
<head>
<script>
function outputUpdate(age) {
    document.querySelector('#selected-age').value = age;
}
</script>
</head>
<body>
<form>
    <p>
       {{ form.age.label }}:
       {{ form.age(min=0, max=100, oninput="outputUpdate(value)") }}
       <output for="age" id="selected-age">{{ form.age.data }}</output>
    </p>
</form>
</body>
</html>
'''

class TestForm(Form):
    age = DecimalRangeField('Age', default=0)


@app.route("/")
def home():
    form = TestForm(csrf_enabled=False)
    return render_template_string(TPL, form=form)


if __name__ == "__main__":
    app.run()

答案 1 :(得分:1)

在你的makeLeague()函数中,你应该在+ =操作中使用它之前初始化tableMid。

var tableMid =&#39;&#39;;

没有这个tableMid是未定义的。

答案 2 :(得分:0)

你的错误来自for {循环的league.length为0。 这就是为什么循环永远不会被执行,所以tableMid是未定义的。

你在开始时用

初始化联盟
league = [];

使它成为非全局变量。 用

初始化它
var league[];

一开始,这应该有效。 此外,您需要使用空字符串初始化tableMid,如John Sheridan所述,或者添加将失败为未定义。

var tableMid = "";

DEMO

[编辑] sry错误的链接