我可以使用哪些javascript函数根据优先级编号选择实验,以便优先级较低的实验不会缺乏?
这是我目前正在使用的功能:
getExperimentBasedOnPriority: function (matchedExps, priorityKey) {
var sortedMatchedExps = _.sortBy(matchedExps, priorityKey).reverse();
var exp = null;
var sum = 0;
for (var x = 0; x < sortedMatchedExps.length; x += 1) {
sum += parseInt(sortedMatchedExps[x][priorityKey], 10);
}
var start = 0;
if (sum > 0) {
// 100
var randomNumber = parseFloat(Math.random().toFixed(2));
for (var i = 0; i < sortedMatchedExps.length; i += 1) {
var e = sortedMatchedExps[i];
var weight = parseInt(e[priorityKey], 10);
var num = weight / sum;
var startPlus = parseFloat((start + num).toFixed(2));
if (randomNumber >= start && randomNumber < startPlus) {
exp = e;
break;
}
start = parseFloat((start + num).toFixed(2));
}
}
return exp;
}
但即使实验具有优先权,它有时也会返回null。
例如,如果我们有matchExps:[{expid:&#39; test&#39;,priority:100}] priorityKey:&#39; priority&#39;并将这些参数传递给函数。我想确保低优先级的实验不会被饿死。我怎么能用javascript
来做到这一点