La pregunta (quizá algo infantil pero es que no veo solución) es qué hacer cuando un valor es igual o menor que 0. Dar ranks iniciales muy grandes y sumar y restar poco no es una buena idea porque habrá las probabilidades serán muy parecidas para una palabra que sé y otra que no consigo recordar , y sumarle a todas las palabras el valor necesario para que la palabra que menos valga sea 1 tampoco porque entonces transtoca la proporcionalidad...
Si se fijan en la función que utilizo verán por qué no pueden ser negativos los valores
Código :
public function extract(nums:Array) {
var arr:Array = nums;
var ln:Number = arr.length;
var suma:Number = 0;
for (var i:Number=0; i<ln; i++) {
suma += arr[i].rank;
}
var aleat:Number = Math.floor(Math.random()*suma);
var ind = 0;
for (i=0; i<ln; i++) {
ind += arr[i].rank;
if (ind>aleat) {
arr[i].times++;
return arr[i].id;
}
}
} 