2017-05-18 78 views
-2

我使用的Math.random()到1之间产生随机数随机项然而,许多项目是在阵列中availableNumbers()检索数组返回“未定义”

然而,当文档的innerHTML与此更新,建议的数字解析为undefined,

我试着从randomNumber中减去1,但这并没有什么区别。

我检查了W3文件,它看起来像,这是正确的实现......

如何将一个最好的去从阵列中检索随机项?有没有比我想要实现的更好的实现?

var availableNumbers = ["0", "911"]; 
function numberSuggestion() { 
    var randomNumber = Math.random() * availableNumbers.length -1; 
    var suggestedNumber = availableNumbers[randomNumber]; 
    document.getElementById("suggestion").innerHTML = "How about dialing " + suggestedNumber + "? Don't like this number? Click the button above again!"; 
} 
+3

'的console.log(randomNumber);'---经验法则,当你调试:确保每个时间点的每个变量都具有期望值。 – zerkms

+0

@zerkms我不知道为什么我会使用console.log? – InterLinked

+2

因为那么你会看到它为什么不起作用... – nnnnnn

回答

0

用一个整数乘以Math.random()将产生在范围[0的浮点值,数)。您需要删除的小数部分得到的整数部分:

var randomNumber = Math.floor(Math.random() * availableNumbers.length); 
+0

谢谢,但这并没有解决问题。我想,因为它会解决一个整数,OOO不会影响。 – InterLinked

+0

没有-1,这个作品完美! (所以我想我不需要减去1!) – InterLinked

+2

如果解释涵盖了关于需要整数结果的关键点,可能会很酷。 (我知道显示的代码是这样做的,但考虑到解释中提到的其他内容,'Math.floor()'部分似乎不那么重要。) – nnnnnn

-1

呦试试这个功能:

Array.prototype.choice = function(){ 
    return this[~~(Math.random()*this.length)]; 
}; 

// now you can call it like this :) 
console.log(["0", "911"].choice()); 
+2

原始代码有什么问题,以及为什么这会修复它? (我知道你已经显示的代码确实有效,但是一个解释对初学者会有帮助。) – nnnnnn

+0

更好,可重用,更快,更易读,一切都可以 – nick

+4

修改内置原型肯定不是“可重用”,“可读“或”一切“。也''''''''''''''''''''''''''''''''''''''''不要太棘手, – zerkms