Javascript 如何随机化整数变量,出现某些数字的几率

Javascript 如何随机化整数变量,出现某些数字的几率,javascript,html,variables,random,Javascript,Html,Variables,Random,要获得0到4(含)之间的随机整数,我使用以下代码: var random = Math.floor(Math.random() * 5); 然而,我希望数字4的选择频率是其他数字的两倍。我如何获得一个介于0-4(含0-4)之间的随机数,但数字4的出现次数是0-3的两倍?这有什么用处吗: 我认为最简单的方法是将数字添加到数组中两次: var nums = [0, 1, 2, 3, 4, 4]; var index = Math.floor(Math.random() * 6); var rand

要获得0到4(含)之间的随机整数,我使用以下代码:

var random = Math.floor(Math.random() * 5);
然而,我希望数字4的选择频率是其他数字的两倍。我如何获得一个介于0-4(含0-4)之间的随机数,但数字4的出现次数是0-3的两倍?

这有什么用处吗:


我认为最简单的方法是将数字添加到数组中两次:

var nums = [0, 1, 2, 3, 4, 4];
var index = Math.floor(Math.random() * 6);
var random = nums[index];
但对于更一般的内容,您可能有一个表:

var nums = [0, 1, 2, 3, 4];
var odds = [0.16667, 0.16667, 0.16667, 0.16667, 0.33333];
var r = Math.random();
var i = 0;
while(r > 0)
  r -= odds[i++];
var random = nums[i];
就这样做吧:

var random = Math.floor(Math.random() * 6);
if (random == 5) random = 4;

在这里,4有50%的几率是第一个随机选择器的coz,第二个随机选择器的coz加起来是20%。

我喜欢sje397的初始答案,并修正了Paddy的建议:

var nums = [0, 1, 2, 3, 4, 4];
var random = nums[Math.floor(Math.random() * 6)];

您的需求背后的技术是使用随机包随机生成器。更多详细信息:

您实际上没有使用nums数组?很明显,随机变量返回nums数组的索引?您应该将行更改为:var random=nums[Math.floorMath.random*6];对于Clarity来说,我不愿意定义固定数字数组来获得随机数。把获得一个数字的两次机会作为一个概念,因为无论如何,你不能得到一个数字的两次机会,除非你开始手动计算它们的出现次数。如果我不得不数数,那么随机性又有什么用呢?@simplyharsh:我不知道你的意思。你希望4的出现频率是整体的两倍,还是0-3组合的两倍?这不是其他数字的两倍。如果有集合的话,+1会更好。javascript中的shuffle:
var nums = [0, 1, 2, 3, 4, 4];
var random = nums[Math.floor(Math.random() * 6)];