获取随机范围选择的最大值
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.12
和 max=1.18
我需要获取随机数所在的累积数组的区间。
例如兰特数可以是 1.5948337644897403
那么这个数字介于 1.05 和 1.8 之间然后我会选择 1.05
问题是数组的最后一个元素从未被挑选出来。如何获取数组的最后一个元素?
问题是您得到的随机值介于 min
和 max
之间,而且您得到的值低于随机值。被排除的物品实际上是第一个物品,但是因为你拿错了物品,所以所有的权重都是错误的,你永远不会得到最后一个物品。
您应该得到一个介于零和 max
之间的随机值,否则您将排除数组中的第一项:
var randNumber = Math.random() * max;
然后您应该得到值高于随机数的项目:
var index = arr.length - 1;
while (index > 0 && arr[index - 1] >= randNumber) index--;
这里有一个测试表明权重是正确的:http://jsfiddle.net/Guffa/kgbL4rsc/
这是我的数组
[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.12
和 max=1.18
我需要获取随机数所在的累积数组的区间。
例如兰特数可以是 1.5948337644897403
那么这个数字介于 1.05 和 1.8 之间然后我会选择 1.05
问题是数组的最后一个元素从未被挑选出来。如何获取数组的最后一个元素?
问题是您得到的随机值介于 min
和 max
之间,而且您得到的值低于随机值。被排除的物品实际上是第一个物品,但是因为你拿错了物品,所以所有的权重都是错误的,你永远不会得到最后一个物品。
您应该得到一个介于零和 max
之间的随机值,否则您将排除数组中的第一项:
var randNumber = Math.random() * max;
然后您应该得到值高于随机数的项目:
var index = arr.length - 1;
while (index > 0 && arr[index - 1] >= randNumber) index--;
这里有一个测试表明权重是正确的:http://jsfiddle.net/Guffa/kgbL4rsc/