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

Subscribe
Notify of
guest

2 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Nycole

muito obrigada!!

Battisti

de nada =)