What javascript function can I use to select experiments based on their priority number so that experiments with lower priority are not starved?
Here's the function that I am currently using:
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;
}
but it sometimes returns null even though experiments have priorities.
For example, if we have matchExps: [{expid: 'test', priority: 100}] priorityKey: 'priority' and pass those arguments to the function. I want to make sure experiments with low priority are not starved. How can I do that using javascript