我试图将用户输入与数组元素进行比较并相应地更改变量的值,但for循环不会遍历数组的所有元素,而是在第一个元素停止。为什么不将输入与数组的所有元素进行比较?
<p>Month</p>
// Get Number Of Month (Jan = 1, Feb = 2, Mar = 3, etc.)
<input id="monthNumber" type="number"><br><br>
<button onclick="calculator()">Show</button><br><br>
<span id="result"></span><br><br>
代码
function getNumOfDays(){
var array = new Array(1,3,5,7,8,10,12, 01, 03, 05, 07, 08);
var monthNumber = document.getElementById("monthNumber").value;
var x;
for(var i = 0; i <= array.length; i++) {
if(monthNumber == array[i]) {
x = 31;
} else {
x = 30;
}
return (array[i] + " " + x) //it always returns 1 to array[i]
}
}
function calculator2() {
document.getElementById("result").innerHTML=getNumOfDays();
}
在浏览器上尝试,请:
<p>Month</p>
// Get Number Of Month (Jan = 1, Feb = 2, Mar = 3, etc.)
<input id="monthNumber" type="number"><br><br>
<button onclick="calculator()">Show</button><br><br>
<span id="result"></span><br><br>
<script>
function getNumOfDays(){
var array = new Array(1,3,5,7,8,10,12, 01, 03, 05, 07, 08);
var monthNumber = document.getElementById("monthNumber").innerHTML;
var x;
console.log(monthNumber);
for(var i = 0; i <= array.length; i++) {
if(monthNumber == array[i]) {
x = 31;
break;
} else {
x = 30;
}
}
return x;
}
function calculator() {
document.getElementById("result").innerHTML=getNumOfDays();
}
</script>
答案 0 :(得分:1)
您的return
语句位于for
循环内。把它放在外面。
function getNumOfDays(){
// Months with 31 days
var array = new Array(1,3,5,7,8,10,12, 01, 03, 05, 07, 08);
var monthNumber= parseInt(document.getElementById("monthNumber").value);
if(monthNumber==2)
return (monthNumber + " " + x)
//variable x will change to 30 or 31 according to month user chose
var x=30;
for(var i = 0; i <array.length; i++)// You had a problem here too. `i`should not be equal to array.length
if(monthNumber== array[i]){
x = 31;
break; //This is not necessary, but it improves performance
}
return (monthNumber + " " + x) //it always returns 1 to array[i]
}
答案 1 :(得分:1)
因为这个原因:
return (array[i] + " " + x) //it always returns 1 to array[i]
在if或else完成后,返回自动结束循环。您应该打印该结果,而不是将其返回。
答案 2 :(得分:1)
您的首要问题是您在迭代完成之前返回。
另一个问题是(可能)您应该只查找ID为innerHTML
的{{1}}元素。 (如果monthNumber未定义,则它将始终返回30,如果没有您找到的更多代码/调试数据,则无法知道,因为您似乎根本没有调试)。
另一个问题是,如果符合monthNumber
,您就不会打破循环。以这种方式考虑,假设monthNumber == array[i]
是monthNumber
,并且3
确实如此。但是你仍在迭代,所以现在当它进入下一次迭代monthNumber == array[i] (i = 3)
时,你将覆盖array[i] = 5
现在等于x
而不是30
。所以一旦你发现条件得到满足,就必须摆脱循环。
我写了一个可以做你想要的工作示例(减2月)。但是有些建议,尽量不要对回答你问题的人不礼貌。目前还不清楚你想要什么,你的实际问题已被多次回答。我知道这可能很难,但要尽量保持与你所要求的相关,如果你被其他东西困住,那就问另一个问题。
31