我读初学者的JavaScript书一些代码,编码器的输入(VAR回答)从阵列(答案)比较随机选择的字符串。这是一个猜谜游戏。
我感到困惑的一个字符串随机选择的方式。该代码似乎是由答案阵列和它的长度属性来乘以的Math.random功能。检查各地,这似乎是使从阵列中随机选择的标准呢?为什么要使用一个数学运算符,*,乘...了...基于阵列的长度的随机字符串?是不是技术上的长度只有3串?我只是觉得它应该是简单的像指数= 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>
这很容易在Python。
>>> import random
>>> random.choice(['red','green','blue'])
'green'
之所以你看的代码是如此普遍的是,通常情况下,当你谈论在统计一个随机变量,它有一个范围[0,1)。把它看成是一个百分比,如果你愿意的话。为了使这个百分比适用于选择一个随机元素,你在范围相乘,使新价值为[0,RANGE)之间。所述Math.floor()
,就可以确保数是一个整数,因为如在数组索引使用时小数没有意义。
你可以很容易地使用你的代码JavaScript编写类似的功能,我敢肯定有很多,其中包括一个JS工具库。就像是
function choose(choices) {
var index = Math.floor(Math.random() * choices.length);
return choices[index];
}
然后,你可以简单地写choose(answers)
得到一个随机颜色。
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
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
干得好
function randomChoice(arr) {
return arr[Math.floor(arr.length * Math.random())];
}
热门下划线JavaScript库为此提供了功能,可用于类似Python的random.choice:
http://underscorejs.org/#sample
var random_sample = _.sample([1, 2, 3, 4, 5, 6]);
Math.random
和类似的功能,通常在0和1之间返回一个数字因此,如果通过你的最高可能值乘以N
随机数,你会用0和N
之间的随机数结束了。
var choiceIndex = Math.floor(Math.random() * yourArray.length)
在Python这是...
import random
a=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'etc.']
print random.choice(a)
第香草JS不提供类似下面的任何方法。你算算,很遗憾。
function sample(array) {
return array[Math.floor(Math.random() * array.length)];
}
console.log(sample([1, 2, 3]));
console.log(sample([11, 22.3, "33", {"a": 44}]));
试试吧here。
但是,如果你正在使用lodash,上述方法已被覆盖。
let _ = require('lodash');
console.log(_.sample([11, 22.3, "33", {"a": 44}]));
试试吧here。
import random
random.choice([1, 2.3, '3'])
试试吧here。
使用单个数据类型,
[1, 2, 3].sample
使用多种数据类型,
[1, 2.34, 'a', "b c", [5, 6]].sample
试试吧here。
更新:JavaScript示例增加。