首页 > 解决方案 > 根据数值属性值选择随机元素

问题描述

我有一组座席,每个座席的属性率是他们接受的呼叫减去拒绝的呼叫。我根据费率在阵列中订购这些代理。为了公平起见,我希望让利率较高的座席比其他较低利率的座席有更高的机会被选中参加通话。我了解如何从数组中选择一个随机元素,但我无法解决这个问题。

标签: javascript

解决方案


在这段代码中,有 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);


推荐阅读