有一个简单的方法,使从JavaScript的数组或任何其他编程语言中随机选择?

问题描述 投票:18回答:8

我读初学者的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>
javascript arrays random
8个回答
32
投票

这很容易在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)得到一个随机颜色。


20
投票

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

15
投票

干得好

function randomChoice(arr) {
    return arr[Math.floor(arr.length * Math.random())];
}

2
投票

热门下划线JavaScript库为此提供了功能,可用于类似Python的random.choice:

http://underscorejs.org/#sample

var random_sample = _.sample([1, 2, 3, 4, 5, 6]);

1
投票

Math.random和类似的功能,通常在0和1之间返回一个数字因此,如果通过你的最高可能值乘以N随机数,你会用0和N之间的随机数结束了。


1
投票
var choiceIndex = Math.floor(Math.random() * yourArray.length)

0
投票

在Python这是...

import random

a=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'etc.']
print random.choice(a)

-2
投票

JavaScript

第香草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

Python

import random
random.choice([1, 2.3, '3'])

试试吧here

Ruby

使用单个数据类型,

[1, 2, 3].sample

使用多种数据类型,

[1, 2.34, 'a', "b c", [5, 6]].sample

试试吧here

更新:JavaScript示例增加。

© www.soinside.com 2019 - 2024. All rights reserved.