Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ndias

Math.random()

Recommended Posts

To tentando randomizar 6 banners, num total de 28. Estou usando um array em JavaScript e faço uma condição no sorteio para sortear outro se repetir.

var lastBanner = 0;
var x = 0;
for (i=0; x < 6; i++){
var Numero = Math.floor(Math.random() * 28);
if (Numero != lastBanner) {
document.write(MNews[Numero]);
x++;
}
lastBanner = Numero;

}

Acontece que essa lógica só dá certo se a repetição vier em sequência.

Por ex: Na primeira vez ele sorteou o número 10. Se na segunda vez ele sorteá-lo novamente, refaz o sorteio.

Mas se na primeira vez ele sortear o número 10 e na segunda vez sortear outro número, o 10 poderá se repetir na terceira vez.

Alguém tem uma sugestão de como fazer outro sorteio caso o número sorteado apareça na mesma aparição de 6?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais simples: embaralhe o array e pegue as 6 primeiras posições.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta William. Você, por favor, teria algum exemplo para embaralhar o array em JavaScript e pegar as 6 primeiras posições para me passar?

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver fazendo assim:

var max = 28;
var i, j, t;
for( var i = 1; i <= max; i++ ) MNews.push( i );
 
for( i = 1; i < ( max - 1 ); i++ ) {
   j = i + ( Math.round( Math.random() * ( max - i - 1 ) ) );
   t = MNews[j];
   MNews[j] = MNews[i - 1];
   MNews[i - 1] = t;
}
 
 
// Demonstrando o resultado pegando 6 números
for( i = 0; i < 6; i++ )
document.write(MNews[i]);
 

Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo:

[1,2,3,4,5].sort((i) => 0.5 - Math.random()).slice(0,3)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.