"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como gerar números aleatórios não repetitivos em JavaScript de maneira eficaz?

Como gerar números aleatórios não repetitivos em JavaScript de maneira eficaz?

Publicado em 2024-11-08
Navegar:689

How to Generate Non-Repeating Random Numbers in JavaScript Effectively?

Geração de números aleatórios não repetidos em JS

A geração de números aleatórios não repetidos em JS pode ser obtida usando várias técnicas. Originalmente, a abordagem era verificar se um número recém-gerado já havia sido criado, adicionando-o a uma matriz e comparando-o. No entanto, isso pode levar a um erro "Tamanho máximo da pilha de chamadas excedido" devido ao excesso de chamadas recursivas.

Uma solução eficiente é gerar uma lista aleatória de números uma vez e trabalhá-la sequencialmente. Essa abordagem elimina a necessidade de chamadas recursivas e garante que não haja repetições.

Aqui está um exemplo usando um Fisher-Yates Shuffle:

function shuffle(array) {
    var i = array.length,
        j = 0,
        temp;

    while (i--) {
        j = Math.floor(Math.random() * (i 1));
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

Alternativamente, geradores podem ser usados ​​para esta finalidade:

function* shuffle(array) {
    var i = array.length;
    while (i--) {
        yield array.splice(Math.floor(Math.random() * (i 1)), 1)[0];
    }
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

ranNums.next().value; // first random number from array
ranNums.next().value; // second random number from array
...

Essas técnicas fornecem maneiras eficientes de gerar números aleatórios não repetidos em JavaScript, eliminando problemas relacionados ao excesso de chamadas recursivas.

Declaração de lançamento Este artigo foi reimpresso em: 1729382177 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3