chaos/src/util.js

28 lines
572 B
JavaScript

/**
* Choose a pair at random among a list of weighted pairs.
*
* @param pairs List of weighted pairs, with the weight coming first.
* @return Selected pair, or null if there is nothing to choose from.
*/
export const choose = pairs =>
{
const total = pairs.reduce((prev, [weight, _]) => prev + weight, 0);
if (total === 0)
{
return null;
}
const value = Math.random() * total;
let sum = 0;
let index = 0;
while (value >= sum)
{
sum += pairs[index][0];
index += 1;
}
return pairs[index - 1];
};