Javascript 随机数生成器很少包含上界和下界

Javascript 随机数生成器很少包含上界和下界,javascript,Javascript,我在一个数组中有一些字母,只有8个,从A开始,到H结束。使用一个典型的随机数生成器,我发现A和H很少生成。如何使这两个边界更具包容性 var allowedLetters=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”]; var i=Math.round(Math.random()*(allowedLetters.length-1)); var字母=允许字母[i]; 控制台日志(字母) 原因第一个和最后一个元素的范围为0.5,所有其他元素的范围为1。可以这样做: var i

我在一个数组中有一些字母,只有8个,从A开始,到H结束。使用一个典型的随机数生成器,我发现A和H很少生成。如何使这两个边界更具包容性

var allowedLetters=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”];
var i=Math.round(Math.random()*(allowedLetters.length-1));
var字母=允许字母[i];
控制台日志(字母)
原因第一个和最后一个元素的范围为
0.5
,所有其他元素的范围为
1
。可以这样做:

var i = Math.floor(Math.random() * allowedLetters.length);

所有元素都得到相同的分布。

round
是错误的,因为随机值的槽中只有一半进入下索引,一半进入上索引

var值=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”],
指数
计数={},
i=1e6;
而(我--){
index=Math.round(Math.random()*(values.length-1));
计数[值[索引]=(计数[值[索引])| | 0)+1;
}
控制台日志(计数)
var allowedLetters=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”];
var calledTimes=[0,0,0,0,0,0,0];
var i=0;
而(i++<100000)调用了times[Math.round(Math.random()*(allowedLetters.length-1))]++;

console.log(调用时间)
此代码似乎不太可能生成J..
返回Math.floor(Math.random()*allowedLetters.length)
IOW:not
Math.round()
-1
var i = Math.floor(Math.random() * allowedLetters.length);