从范围中选择随机整数时的奇怪行为

时间:2015-07-06 13:04:13

标签: javascript

用户提供范围,例如3-5。该脚本应该在该范围内生成一个随机整数。现在,这段代码工作正常。

length = Math.floor(Math.random() * (5 - 3 + 1)) + 3;

但是,如果我以编程方式从范围中提取值并执行相同操作,则结果是无意义的。

//Split into elements
var range = lengthval.split("-"),
    minlen = range[0],
    maxlen = range[1];

if (!isNaN(minlen) && !isNaN(maxlen)) {
    //Pick a number from range
    length = Math.floor(Math.random() * (maxlen - minlen + 1)) + minlen;
}

真正奇怪的是,以下“混合”代码段工作正常。

//Split into elements
var range = lengthval.split("-"),
    minlen = range[0],
    maxlen = range[1];

if (!isNaN(minlen) && !isNaN(maxlen)) {
    //Pick a number from range
    length = Math.floor(Math.random() * (maxlen - minlen + 1)) + 3;
}

鉴于提供的范围当然是3-5。

任何人都可以帮助一个新鲜的JavaScript开发人员解决这个问题吗? :)

3 个答案:

答案 0 :(得分:1)

我不确定lengthval是什么,我相当肯定你需要使用parseInt

minlen = parseInt(range[0], 10)
maxlen = parseInt(range[1], 10)

答案 1 :(得分:1)

在这里,感谢@depperm的更新:



//Split into elements
var range = '3-5'.split("-");
minlen = Number(range[0]);
maxlen = Number(range[1]);
var length;
if (!isNaN(minlen) && !isNaN(maxlen)) {
  //Pick a number from range
  length = Math.floor(Math.random() * (maxlen - minlen + 1)) + minlen;
  alert(length);
}




希望这有帮助。

答案 2 :(得分:0)

您必须将从split获得的字符串解析为数字

var range = "3-5".split("-");
var minlen = parseInt(range[0]);
var maxlen = parseInt(range[1]);
if (!isNaN(minlen) && !isNaN(maxlen))  {
      //Pick a number from range
      var length = Math.floor(Math.random() * (maxlen - minlen + 1)) + minlen;
}

还声明您的变量(使用var)并以分号结束语句。

http://jsfiddle.net/ks3hrzbL/