Нужна помощь цикла для построения таблицы с Javascript - PullRequest
0 голосов
/ 15 декабря 2010

Вот моя функция:

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 = 4 и bps = 25 следует создать строки с первым значением td = 100, 75, 50, 25, -25, -50, -75, -100 - в этом порядке.

То, что он делает сейчас, это создает их как 100, 75, 50, 25, -0, -25, -50 - и все.

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Ваш последний цикл должен быть >= вместо > и начинаться на один ниже, например:

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

Вы можете проверить это здесь , единственным другим изменением является добавление </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;
}

Вы можете проверить результат здесь , это просто более простой / дешевый однопетлевой способ или выполнение того же действия.

1 голос
/ 15 декабря 2010

Вы должны начать с 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;
    }
...