Randomizador //Repositório JavaScript
Descrição
Container capaz de retornar items randomizados, baseados em probabilidade e sequencialmente.
Criado: 2005.08.08
Criado: 2005.08.08
Código (Download)
//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/classes/randomizer [rev. #1]
Randomizer = function(type){
var o = this;
(o.d = [], o.t = type || Randomizer.RANDOMIZED, o.x = -1, o.u = 0);
};
with({o: Randomizer, p: Randomizer.prototype}){
o.SEQUENCED = (o.PROBABILITY = (o.RANDOMIZED = 0) + 1) + 1;
p.add = function(object, probability){
this.u += (this.d[ this.d.length ] = {o: object, p: Math.abs(probability || 1)}).p;
};
p.remove = function(index){
index > -1 && index < this.d.length && (this.u -= this.d.splice(index, 1).p);
};
p.next = function(){
if(!this.u)
return null;
var i = 0, m = 0, x = this.t == Randomizer.SEQUENCED ?
(this.x = (this.x + 1) % this.d.length)
: Math.round(Math.random() * (this.t == Randomizer.PROBABILITY ? this.u
: this.d.length - 1));
if(this.t == Randomizer.PROBABILITY)
do m += this.d[ i++ ].p;
while(x > m || !((x = --i) + 1));
return this.d[ x ].o;
};
}
Exemplo (Exemplo)
<script type="text/javascript">
//<![CDATA[
var probability = new Randomizer(Randomizer.PROBABILITY);
probability.add("A", 20);
probability.add("B", 10);
probability.add("C", 2);
document.write("<h2>Randomizer.PROBABILITY = A: 20, B: 10, C: 2</h2>");
for(var i = 20; i--; document.write(probability.next(), ", "));
var random = new Randomizer(Randomizer.RANDOMIZED);
random.add("A");
random.add("B");
random.add("C");
document.write("<h2>Randomizer.RANDOMIZED = A, B, C</h2>");
for(var i = 20; i--; document.write(random.next(), ", "));
var sequenced = new Randomizer(Randomizer.SEQUENCED);
sequenced.add("A");
sequenced.add("B");
sequenced.add("C");
document.write("<h2>Randomizer.SEQUENCED = A, B, C</h2>");
for(var i = 20; i--; document.write(sequenced.next(), ", "));
//]]>
</script>
Ajuda
Construtor
- Randomizer(type: RandomizerType)
-
Gera uma instância de Randomizer.
- type
- ajusta o comportamento do container, os possíveis valores são: Randomizer.SEQUENCED (retorna os items na mesma ordem em que foram inseridos), Randomizer.PROBABILITY (retorna items randomicamente, mas levando em consideração a probabilidade definida para cada um deles) e Randomizer.RANDOMIZED (retorna items randomicamente)
Métodos
- Randomizer.add(object: Object, probability: Integer): void
-
Adiciona um item ao container.
- object
- objeto a ser adicionado
- probability
- útil apenas quando o tipo do container é "Randomizer.PROBABILITY", onde probability deve ser é um número inteiro positivo e maior que 1
- Randomizer.remove(index: Integer): void
-
Remove um elemento do container.
- index
- índice do elemento a ser removido
- Randomizer.next(void): Object
- Retorna um item de acordo com o tipo do container.
Ranque (Votos: 44)
1.95