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);
推荐阅读
- jsf - jsf静态列表不会出现在数据表中
- spring-integration - 如何使用自定义错误通道和 WebFlux.inboundGateway 回复错误响应?
- javascript - 将对象键作为参数传递给函数
- node.js - 在本地机器上的 VSCode 中使用 NodeJS 运行带有层的 AWS Lambda
- vb.net - 替换或删除字符串中的字符
- node.js - 构建全栈应用程序目录的合适方法是什么?
- javascript - 无法绑定到“ngModel”,因为它不是 ng-bootstrap 模态中“输入”的已知属性
- git - GIT如何从fork创建的PR中获取分支名称
- asp.net-mvc - Fluent NHibernate 映射不适用于某些表
- mysql - SQL - 如何为每个用户检索 5 个最近的评论