这是我的数组
[0.12, 0.13, 0.3, 0.5, 0.75];
从这个数组我计算总和累积数组:
[ 0.12, 0.25, 0.55, 1.05, 1.8 ]
我在数组的最小值和最大值之间生成rand值:
var randNumber = (Math.random() * (max - min)) + min;
在以下情况下为min=0.12
和max=1.18
我需要得到兰特数落入的累积数组的间隔。
例如,兰特数可以是1.5948337644897403
,然后数字介于1.05和1.8之间,然后我会选择1.05
问题是数组的最后一个元素永远不会被挑选出来。如何获取数组的最后一个元素?
答案 0 :(得分:2)
问题是,您在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/