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

Gerar vários números aleatórios sem repetição capa

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, 10

Agora 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

Inscrever-se
Notificar de
guest

2 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários
Nycole

muito obrigada!!

Battisti

de nada =)