这是我的数组
[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
之间的随机值,而且您得到的值低于随机值。被排除的项目实际上是第一个项目,但是因为你得到了错误的项目,所以所有的权重都是错误的,你永远不会得到最后一个项目。
你应该得到一个介于 0 和 max
之间的随机值,否则你将排除数组中的第一项:
var randNumber = Math.random() * max;
然后您应该得到值高于随机数的项目:
var index = arr.length - 1;
while (index > 0 && arr[index - 1] >= randNumber) index--;
这是一个显示权重正确的测试:http://jsfiddle.net/Guffa/kgbL4rsc/
关于javascript - 获取随机范围选择的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590001/