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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-10-20 08:02:29534parcourir

How to Generate Non-Repeating Random Numbers in JavaScript without Recursion?

Générer des nombres aléatoires non répétitifs en JavaScript

Générer une séquence de nombres aléatoires non répétitifs peut être un défi en JavaScript. Voici une description d'un problème représentatif et de sa résolution.

Le problème :

Le code fourni tente de générer des nombres aléatoires non répétitifs en vérifiant par rapport à un tableau de nombres précédemment nombres générés. Cependant, cette approche déclenche une erreur de débordement de pile en raison d'appels de fonction récursifs.

La meilleure solution :

Au lieu d'appels de fonction récursifs continus, envisagez de générer un tableau mélangé de chiffres au départ. Cette approche garantit que chaque numéro n'est généré qu'une seule fois. Voici un Fisher-Yates Shuffle qui y parvient efficacement :

<code class="javascript">function shuffle(array) {
  let i = array.length;
  let j = 0;
  let temp;

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

  return array;
}

let ranNums = shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);</code>

Cette technique évite les opérations coûteuses sur les tableaux en échangeant des éléments directement dans le tableau d'origine.

Une autre alternative :

Pour les navigateurs prenant en charge le générateur, vous pouvez utiliser la fonction de générateur suivante :

<code class="javascript">function* shuffle(array) {
  let i = array.length;

  while (i--) {
    yield array.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
  }
}

let 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
// etc.</code>

En utilisant les valeurs générées, cette approche retarde les opérations de tableau jusqu'à ce qu'elles soient réellement requises, ce qui la rend plus efficace pour certains cas d'utilisation. Quelle que soit la méthode que vous choisissez, ces solutions génèrent efficacement des nombres aléatoires non répétitifs en JavaScript.

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