nic*_*war 20 javascript arrays random
我正在阅读初学者的JavaScript书籍,其中包含一些代码,用于将编码器的输入(var answer)与从数组中随机选择的字符串(答案)进行比较.这是一个猜谜游戏.
我对随机选择字符串的方式感到困惑.代码似乎是将Math.random函数乘以answers数组及其length属性.检查周围,这似乎是从数组中随机选择的标准方法?你为什么要使用数学运算符*来乘以......一个基于数组长度的随机字符串?技术上长度不是只有3个字符串吗?我觉得它应该像index = answers.random一样简单.JS或其他语言中是否存在这种情况?
<script>
var guess = "red";
var answer = null;
var answers = [ "red",
"green",
"blue"];
var index = Math.floor(Math.random() * answers.length);
if (guess == answers[index]) {
answer = "Yes! I was thinking " + answers[index];
} else {
answer = "No. I was thinking " + answers[index];
}
alert(answer);
</script>
Run Code Online (Sandbox Code Playgroud)
Mat*_*ngo 32
在Python中很容易.
>>> import random
>>> random.choice(['red','green','blue'])
'green'
Run Code Online (Sandbox Code Playgroud)
您正在查看的代码如此常见的原因通常是,当您在统计中讨论随机变量时,它的范围为[0,1).如果您愿意,可以将其视为百分比.要使此百分比适合选择随机元素,请将其乘以范围,允许新值介于[0,RANGE]之间.的Math.floor(),就可以确保数是一个整数,因为如在数组索引使用时小数没有意义.
您可以使用您的代码在Javascript中轻松编写类似的函数,我确信有很多JS实用程序库包含一个.就像是
function choose(choices) {
var index = Math.floor(Math.random() * choices.length);
return choices[index];
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地写choose(answers)一个随机颜色.
Ada*_*kis 21
Math.random 给你一个介于0和1之间的随机数.
将此值乘以数组的长度将得到一个严格小于数组长度的数字.
调用Math.floor的是将截断小数,并给你数组的边界内的随机数
var arr = [1, 2, 3, 4, 5];
//array length = 5;
var rand = Math.random();
//rand = 0.78;
rand *= arr.length; //(5)
//rand = 3.9
rand = Math.floor(rand);
//rand = 3
Run Code Online (Sandbox Code Playgroud)
var arr = [1, 2, 3, 4, 5];
//array length = 5;
var rand = Math.random();
//rand = 0.9999;
rand *= arr.length; //(5)
//rand = 4.9995
rand = Math.floor(rand);
//rand = 4 - safely within the bounds of your array
Run Code Online (Sandbox Code Playgroud)
sco*_*ski 15
干得好
function randomChoice(arr) {
return arr[Math.floor(arr.length * Math.random())];
}
Run Code Online (Sandbox Code Playgroud)