Gerar vários números aleatórios sem repetição em JavaScript
Neste artigo você vai aprender a gerar vários números aleatórios sem repetição em JavaScript, utilizando os próprios recursos da linguagem
Fala programador(a), beleza? Bora aprender mais sobre geração de números aleatórios em JavaScript!
Primeiramente vamos criar uma lista ordenada, com o máximo de números aleatórios que precisamos gerar sem repetição
Veja como fica o código:
const maxNumbers = 10;
let list = [];
for (let i = 0; i < maxNumbers; i++) {
list[i] = i + 1;
}
console.log(list); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Agora vamos embaralhar o número neste mesmo array, então os números não se repetirão
E teremos uma lista com números únicos
Veja como embaralhar a lista:
let randomNumber;
let tmp;
for (let i = list.length; i;) {
randomNumber = Math.random() * i-- | 0;
tmp = list[randomNumber];
// troca o número aleatório pelo atual
list[randomNumber] = list[i];
// troca o atual pelo aleatório
list[i] = tmp;
}
console.log(list); // 2, 3, 7, 1, 6, 8, 4, 5, 9, 10Agora temos uma lista aleatório de x números, onde x foi definido na primeira parte do nosso algoritmo, pela variável maxNumbers
E é claro, o resultado da segunda parte pode variar pela quantidade de números e também pela aleatoriedade empregada no algoritmo
Porém é interessante como a solução é simples, apenas reposicionando os números de uma lista previamente criada
O nome desse algoritmo é Fisher-Yates, você pode saber mais clicando aqui
Ele é muito utilizado para reordenação aleatória de listas
Conclusão
Neste artigo vimos como gerar vários números aleatórios sem repetição com JavaScript
Utilizamos o algoritmo Fisher-Yates, que foi explicado acima
Desta forma geramos uma lista, que embaralha os seus números e gera uma lista de números aleatórios únicos
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
Fala, tu viu que a lista sempre começa em 1 e vai até maxNumbers, né?
Mas e se tu precisar de números dentro de um intervalo, tipo de 50 a 60, sem repetir?
A sacada é a mesma: primeiro monta a lista com todos os valores possíveis do intervalo, depois embaralha
Só muda a hora de preencher o array:
const min = 50; const max = 60;
for (let i = min; i <= max; i++) { list.push(i); }
Depois é só rodar o mesmo embaralhamento do Fisher-Yates que a gente viu ali em cima
E tu tem os números do intervalo em ordem aleatória, todos únicos, sem repetição =)
Às vezes tu não quer a lista inteira embaralhada
Quer só 3 números aleatórios sem repetição, por exemplo
Depois de embaralhar, é só fatiar o array com o slice:
const quantidade = 3; let sorteados = list.slice(0, quantidade);
console.log(sorteados); // 3 primeiros da lista já embaralhada
Como a lista já foi misturada pelo Fisher-Yates, pegar os primeiros itens é o mesmo que sortear aleatório
E por causa disso, nenhum se repete =)
Repara que o coração do embaralhamento é o Math.random
Mas o que ele faz mesmo?
O Math.random devolve um número quebrado maior ou igual a zero e menor que um
Multiplicando esse valor pela quantidade de itens e cortando a parte decimal com o | 0, a gente transforma isso num índice válido do array
É esse índice que decide qual posição vai ser trocada a cada passo do laço
Perguntas frequentes
Como garantir que os números não se repetem?
O segredo é não sortear número por número, e sim montar uma lista com todos os valores possíveis e só embaralhar essa lista
Como cada valor aparece uma única vez na lista original, é impossível repetir depois de misturar
Dá pra usar o mesmo código para sortear letras ou nomes?
Dá sim
O Fisher-Yates embaralha qualquer array, então serve pra números, letras, nomes, o que tu colocar dentro da lista
Por que não usar só Math.random direto num intervalo?
Porque sorteando solto tu pode cair no mesmo número duas vezes
Aí teria que ficar checando se já saiu, e isso vai ficando lento conforme a lista cresce
Embaralhar a lista inteira resolve isso de um jeito bem mais simples
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 473 aulas
- 20 projetos
- 39h 26min
Blog | Mais populares

As diferenças de var, let e const

Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]

Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação A popularidade da automação de processos com o n8n está em alta, principalmente […]


muito obrigada!!
de nada =)