根据数值属性值选择随机元素

时间:2019-06-01 19:34:19

标签: javascript

我有一系列座席,每个座席的属性费率是接受的呼叫减去拒绝的呼叫。我根据费率在阵列中订购这些代理。我想给费率较高的座席提供比其他费率较低的座席更高的机会,以使事情更公平。我了解如何从数组中选择随机元素,但无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

在此代码中,有2/15的机会得到2,有3/15的机会得到3,依此类推。
15是基于所有代理的总费率。

var aoa = [{rate: 2},{rate: 3},{rate: 6},{rate: 4}];
var r = Math.random() * aoa.map(e => e.rate).reduce((ac,c) => ac+c,0);
var sa;
aoa.forEach((a,i) => {
    var pt = aoa.slice(0,i).map(e => e.rate).reduce((ac,c) => ac+c,0); 
    if (r >= pt && r < pt+a.rate) sa = a;
    console.log(`${r} has to be between ${pt} and ${pt+a.rate} if chosen rate =  ${a.rate}`);
});
console.log(sa);