【问题标题】:How to create a javascript function that randomly generates a number between 1 and 12, and returns the name of the corresponding month如何创建一个随机生成1到12之间的数字并返回对应月份名称的javascript函数
【发布时间】:2020-12-07 18:33:33
【问题描述】:

我在下面的代码中遇到的问题是它每次都会产生“1”或“January”,而不是我猜是使用 1-12 之间的随机生成的数字。我最初的想法是问题是某些部分不允许 Math.random 方法正确执行,所以它默认为 1?在我添加“if”语句之前,Math.random 函数可以完美运行。我想我可能叫错了。

注意:我相信我可以创建一个循环或其他东西来返回相应的月份,但我正在努力使代码尽可能基本,因为我仍在学习基础知识。

非常欢迎任何帮助或见解。谢谢!

function randomNum(min, max) {
  var result = Math.floor(Math.random() * (max - min + 1) + min);
  if (result = 1) {
    return "January";
  } else if ((result = 2)) {
    return "February";
  } else if ((result = 3)) {
    return "March";
  } else if ((result = 4)) {
    return "April";
  } else if ((result = 5)) {
    return "May";
  } else if ((result = 6)) {
    return "June";
  } else if ((result = 7)) {
    return "July";
  } else if ((result = 8)) {
    return "August";
  } else if ((result = 9)) {
    return "September";
  } else if ((result = 10)) {
    return "October";
  } else if ((result = 11)) {
    return "November";
  } else if ((result = 12)) {
    return "December";
  }
  return result;
}

console.log(randomNum(1, 12));

【问题讨论】:

标签: javascript function if-statement math random


【解决方案1】:

您可以将随机值作为数组长度的一个因子,并将整数值作为获取月份名称的索引。

function getRandomMonth() {
    const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

    return months[Math.floor(Math.random() * months.length)];
}

console.log(getRandomMonth());

【讨论】:

    【解决方案2】:

    您在 if 中使用赋值运算符而不是等于检查。全部替换

    =

    ==

    在你的条件下

    【讨论】:

    • 啊!我在第一次迭代中就这样做了,但在第一次“如果”中没有这样做。谢谢!!
    【解决方案3】:

    使用=====(严格相等)进行比较,而不是=(赋值)。

    function randomNum(min, max) {
      var result = Math.floor(Math.random() * (max - min + 1) + min);
      if (result == 1) {
        return "January";
      } else if ((result == 2)) {
        return "February";
      } else if ((result == 3)) {
        return "March";
      } else if ((result == 4)) {
        return "April";
      } else if ((result == 5)) {
        return "May";
      } else if ((result == 6)) {
        return "June";
      } else if ((result == 7)) {
        return "July";
      } else if ((result == 8)) {
        return "August";
      } else if ((result == 9)) {
        return "September";
      } else if ((result == 10)) {
        return "October";
      } else if ((result == 11)) {
        return "November";
      } else if ((result == 12)) {
        return "December";
      }
      return result;
    }
    
    console.log(randomNum(1, 12));

    您可以通过简单地从所有月份的数组中检索随机元素来简化此操作。

    function randomMonth(){
      return ["January", "February", "March", "April", 
          "May", "June", "July", "August", "September", 
          "October", "November", "December"][Math.random() * 12 | 0];
    }
    console.log(randomMonth());

    【讨论】:

      【解决方案4】:

      if (result = 1) 这样的情况下,您的代码块尝试使用 = 进行比较。 result = x 是一个赋值操作,它不仅将 x 赋值给 result,而且 返回 x。因为,if 具有非布尔值的一般规则是返回的值不应为 null 以执行,它会导致执行 if 块。 == 用于比较。

      尝试使用包含所有月份的列表,然后根据生成的随机数索引列表:)

      function randomNum(min, max) {
        let result = Math.floor(Math.random() * (max - min + 1) + min);
        let months= ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
        
        return months[result-1];
      }
      console.log(randomNum(1, 12));

      *使用let 定义变量以严格限制它们在{} 块或函数中的定义。这有助于避免在函数内意外更改全局变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 2014-04-11
        相关资源
        最近更新 更多