Javascript for-loop只能用于第一个数组元素

时间:2017-07-28 21:08:50

标签: javascript arrays for-loop

我试图将用户输入与数组元素进行比较并相应地更改变量的值,但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>

3 个答案:

答案 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月)。但是有些建议,尽量不要对回答你问题的人不礼貌。目前还不清楚你想要什么,你的实际问题已被多次回答。我知道这可能很难,但要尽量保持与你所要求的相关,如果你被其他东西困住,那就问另一个问题。

See here

31