Maison > interface Web > js tutoriel > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-20 07:57:02
original
724 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!