需要使用Javascript构建表的循环帮助

时间:2010-12-15 19:21:23

标签: javascript html loops html-table

这是我的功能:

function CreateResultsTable(bps, incs) {
    var table = document.createElement('table');
    var str = '<table border=1>';
    str += '<tr><th></th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>';

    var i = 0;

    // up
    for (i = 0; i < incs; i++) {
        var num = (incs - i) * bps;
        var newStr = num.toString();
        str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>';
    }
    i = 0;

    //down
    for (i = incs; i > 0; i--) {
        var num = (incs - i) * bps;
        var newStr = '-' + num.toString();
        str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>';
    }
    return str;
}

我想要的是说我传入{bps = 25, incs = 4}。它应该总是创建incs的行数(在标题行下面)的两倍。因此,对于incs = 4和bps = 25,它应该按顺序创建第一个td = 100, 75, 50, 25, -25, -50, -75, -100的行。

它现在正在做的是像100, 75, 50, 25, -0, -25, -50那样创建它们 - 就是这样。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

你最后一个循环必须是>=而不仅仅是>并且开始低一个,如下所示:

for (i = incs-1; i >= 0; i--) {

You can test it out here,唯一的其他更改是在结尾添加</table>并在border属性上添加引号。


有一个更简单的方法可以解决这个问题,如果你愿意,可以使用一个循环并排除0,如下所示:

function CreateResultsTable(bps, incs) {
    var str = '<table border="1">';
    str += '<tr><th></th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>';

    for (var i = incs*bps, low = -i; i >= low; i-=bps) {
        if (i == 0) continue; //exclude the 0 row
        str += '<tr><th>' + i + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>';
    }
    str += '</table>';
    return str;
}

You can test the result here,它只是一种更简单/更便宜的单循环方式或做同样的事情。

答案 1 :(得分:1)

你必须从incs -1开始并计数到零。所以函数应该看起来像

function CreateResultsTable(bps, incs) {
        var table = document.createElement('table');
        var str = '<table border=1>';
        str += '<tr><th></th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>';

        var i = 0;

        // up
        for (i = 0; i < incs; i++) {
            var num = (incs - i) * bps;
            var newStr = num.toString();
            str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>';
        }
        i = 0;

        //down
        for (i = incs - 1; i >= 0; i--) {
            var num = (incs - i) * bps;
            var newStr = '-' + num.toString();
            str += '<tr><th>' + newStr + '</th><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td><td>100,000</td></tr>';
        }
        return str;
    }