有没有一种简单的方法可以在JavaScript或任何其他编程语言中从数组中进行随机选择?

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)一个随机颜色.

  • 这就是为什么Python附带电池的原因 (4认同)
  • 在 JS 函数中,你需要用 `var` 声明 `index`。就目前而言,`index` 是一个全局变量。 (2认同)

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)

  • Math.random() 将返回一个 0 到 1 之间的数字,将该数字乘以数组长度,它可能的最大值就是数组长度,但是如果 random 没有准确返回 1,它将有一个小数。 Floor() 会删除该小数(如果存在),否则不执行任何操作。 (3认同)