js 根据权重概率随机

 1 //数组元素叠加 [1,2,3,4,,] -> [1,3,6,10,,,,]
 2 function arrOverAdd(arr){
 3     if( !arr || arr.length <= 0){
 4         return [];
 5     } else {
 6         var temp = [];
 7         for(var i = 0;i < arr.length ; i++){
 8             if(i == 0){
 9                 temp[i] = parseInt(arr[i]);
10             } else {
11                 temp[i] = temp[i-1] + parseInt(arr[i]);
12             }
13         }
14         return temp;
15     }
16 }
17 
18 
19 /**
20  * 获取数组中最接近的值得index
21  * @param random 随机数
22  * @param weightArray 权重数组
23  * @returns {number}
24  */
25 function getArrIndex(random,weightArray){
26     var index = 0;
27     if(random <= weightArray[0]){
28         return 0;
29     } else if(random >= weightArray[weightArray.length-1]){
30         index = weightArray.length - 1;
31         return index;
32     } else {
33         for(var i = 0 ;i < weightArray.length; i++){
34             if(random <= weightArray[i]){
35                 index = i;
36             } else if(random > weightArray[i] && random <= weightArray[i + 1]){
37                 index = i + 1;
38                 break
39             } else if (random > weightArray[i] && random <= weightArray[ i + 1] ){
40                 index = i + 1;
41                 break;
42             }
43         }
44     }
45     return index;
46 }
47 
48 
49 var weightArr = [10,20,30,30,10];
50 
51 weightArr = arrOverAdd(weightArr);
52 console.log(weightArr);
53 var totalWeight = weightArr[weightArr.length - 1];
54 
55 var random = Math.random() * totalWeight;
56 console.log(random);
57 var arrIndex = getArrIndex(random,weightArr);
58 console.log(“索引:”+arrIndex);

 

转载于:https://www.cnblogs.com/xiaodongli/p/5193356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值