我正在尝试将计数器的值插入一个名为numpay的数组中。遗憾的是没有任何反应。我的错误是什么?这是我在下面尝试过的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example-1</title>
</head>
<body>
<p id="demo"></p>
<script>
function validateForm() {
var months=(principal+principal*interestrate*0.01)/monthlypayment;
var numpay = new Array(months);
for(var i=0;i<=months-1;i++)
{
numpay.push(i);
text += numpay[i] + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
</script>
</body>
</html>
答案 0 :(得分:1)
正如其他人所指出的,这样的事情应该有效:
var months = 12;
var numpay = []; // just as easy
var text = "";
for (var i = 1; i <= months; i++) {
numpay.push(i);
text += numpay[i - 1] + "<br/>";
}
document.getElementById('demo').innerHTML = text;
<p id="demo">(empty)</p>
虽然你在for
循环中将它们组合在一起,但你在这里做了两件事:填写几个月,然后创建你想要添加到DOM的文本。
对于只做一件事的一点代码,有很多话要说。您可以编写一个可重用的range
函数,它使用更现代的JS技术为您提供两个值之间的数字整数范围。所以
const range = (lo, hi) => [...new Array(hi - lo + 1)].map((_, i) => i + lo);
使用它,您可以通过调用此函数来创建months
变量:
const months = range(1, 12);
然后,使用此数组,您可以使用Array.prototype.join
将值组合到您想要的文本中:
const text = months.join('<br/>')
这会带来更好的代码:
const range = (lo, hi) => [...new Array(hi - lo + 1)].map((_, i) => i + lo);
const months = range(1, 12);
document.getElementById('demo').innerHTML = months.join('<br/>');
<p id="demo">(empty)</p>
如果您需要text
变量用于其他内容,则只需将其指定为联接的结果,然后将innerHTML
分配给它。
显然,range
功能是不必要的。你可以写const months = [...new Array(12)].map((_, i) => i + 1);
。但是考虑到这种抽象,通常可以让你编写更清晰的代码。
答案 1 :(得分:0)
JS中的数组是从零开始的,因此,如果.push(i)
i === 1
1
,则值numpay[0]
会进入numpay[i-1]
的插槽。
然后要访问该项目,您必须使用text
。
另一件事是你似乎忘记在循环开始之前声明并初始化var months = 12;
var numpay = []; // just as easy
var text = "- ";
for (var i = 1; i <= months; i++) {
numpay.push(i);
text += numpay[i - 1] + " - ";
}
console.log(text);
。你需要这样做,如果没有那么变量只存在于循环体内(并且每次循环体结束时都会丢失它的值)。
演示:
{{1}}
答案 2 :(得分:0)
1。)通过创建类似的数组(new Array(12)
),您要在数组中创建12个undefined
条目。然后你推到阵列的末尾。
2。)您还需要使用月var months = 12, text;
初始化文本。
var months = 12, text;
var numpay = new Array(months);
for(var i=1; i<=months; i++){
numpay[i] = i;
text += numpay[i] + "<br>";
}
document.getElementById("demo").innerHTML = text;
这仍然会在索引0处给你未定义,但我会留给你解决。但是,numpay[i] = i
会覆盖使用数组创建的undefined
。
答案 3 :(得分:0)
使用如下参数实例化数组时:
var numpay = Array(12);
它会产生一个包含12个未定义元素的数组。当您按下一个新项目时,它将被放置在第13个插槽中。
相反,只需这样做:
var text = "";
var months=12;
var numpay = [];
for(var i=1;i<=months;i++)
{
numpay.push(i);
text += numpay[i-1] + "<br>"; //use i-1 here, not i
}
document.getElementById("demo").innerHTML = text;
结果是:
"1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>"