Maison  >  Article  >  interface Web  >  Comment générer efficacement des nombres aléatoires non répétitifs en JavaScript ?

Comment générer efficacement des nombres aléatoires non répétitifs en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-20 07:57:02725parcourir

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

Génération de nombres aléatoires non répétitifs dans JS

La génération de nombres aléatoires non répétitifs dans JS peut être réalisée en utilisant diverses techniques. À l’origine, l’approche consistait à vérifier si un nombre nouvellement généré avait déjà été créé en l’ajoutant à un tableau et en le comparant. Cependant, cela peut entraîner une erreur « Taille maximale de la pile d'appels dépassée » en raison d'appels récursifs excessifs.

Une solution efficace consiste à générer une fois une liste aléatoire de numéros et à la parcourir de manière séquentielle. Cette approche élimine le besoin d'appels récursifs et garantit l'absence de répétitions.

Voici un exemple utilisant un Fisher-Yates Shuffle :

<code class="js">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]);</code>

Alternativement, des générateurs peuvent être utilisés à cette fin :

<code class="js">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
...</code>

Ces techniques fournissent des moyens efficaces de générer des nombres aléatoires non répétitifs en JavaScript, éliminant ainsi les problèmes liés aux appels récursifs excessifs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn