获取随机范围选择的最大值

Getting the maximum of a random ranged selection

这是我的数组

[0.12, 0.13, 0.3, 0.5, 0.75];

我从这个数组计算总和累积数组:

[ 0.12, 0.25, 0.55, 1.05, 1.8 ]

我从数组中生成介于最小值和最大值之间的随机值:

var randNumber = (Math.random() * (max - min)) + min;

在下面的例子中 min=0.12max=1.18

我需要获取随机数所在的累积数组的区间。 例如兰特数可以是 1.5948337644897403 那么这个数字介于 1.05 和 1.8 之间然后我会选择 1.05

问题是数组的最后一个元素从未被挑选出来。如何获取数组的最后一个元素?

问题是您得到的随机值介于 minmax 之间,而且您得到的值低于随机值。被排除的物品实际上是第一个物品,但是因为你拿错了物品,所以所有的权重都是错误的,你永远不会得到最后一个物品。

您应该得到一个介于零和 max 之间的随机值,否则您将排除数组中的第一项:

var randNumber = Math.random() * max;

然后您应该得到值高于随机数的项目:

var index = arr.length - 1;
while (index > 0 && arr[index - 1] >= randNumber) index--;

这里有一个测试表明权重是正确的:http://jsfiddle.net/Guffa/kgbL4rsc/