/** * 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]; };