这是我的功能:
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
那样创建它们 - 就是这样。
我做错了什么?
答案 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;
}