JavaScript では、通常、生成される乱数は繰り返しますが、場合によっては、繰り返しのない乱数が必要になることがあります。これを実現するにはどうすればよいでしょうか。次に、非繰り返し乱数を生成する 3 つの方法を説明し、どちらの方法がより効率的であるかを比較します。 方法 1 アイデア: まず 1 から 3000 までの配列を作成し、毎回 1 つの数値を取得し、配列から取り出した数値を削除します。繰り返される。 コードをコピー コードは次のとおりです: <br>var count=3000; <br>varoriginalArray=new Array;//元の配列<br>//元の配列に値を代入しますoriginalArray<br>for (var i=0;i<count i>originalArray[i]=i 1; <br>} <br>var d1=new Date().getTime(); <br>for (i=0;i<count>var index= Math.floor(Math.random()*originalArray.length); //ランダムに位置を選択します <br>document.write(index " , "); <br>originalArray.splice(index,1) ; <br>} <br>var d2=new Date().getTime(); <br>document.write("操作に時間がかかります" (d2-d1)); ><br> <br>パフォーマンス: 1528 ミリ秒かかりました。 </count></count> </div> <br><br>方法 2<br> <strong>アイデア: 方法 1 のスライス方法を改良して効率を向上させます。または、元の配列から数値を取り出し、元の配列のこの位置の値を null に割り当てます。次回その番号を取得するときに、その番号が null であるかどうかを確認します。null の場合は取得されません。 </strong><br><br><div class="codetitle"> <span>コードをコピー<a style="CURSOR: pointer" data="4787" class="copybut" id="copybut4787" onclick="doCopy('code4787')"><u></u> コードは次のとおりです:</a></span> </div><script type="text/javascript "> <div class="codebody" id="code4787">var count=3000; <br>varoriginalArray=new Array;//元の配列<br>//元の配列に値を代入しますoriginalArray<br>for (var i=0;i<count i>originalArray[i]=i 1; <br>} <br>var d1=new Date().getTime(); <br>for (var num,i=0;i<count> do{ <br>num=Math.floor(Math.random()*count); <br>}while(originalArray[num]==null); ] " , ") ; <br>originalArray[num]=null; <br>var d2=new Date().getTime(); <br>document.write("操作に時間がかかります" (d2) -d1)); <br><br> <br>パフォーマンス: 290 ミリ秒。 <br><br><br>方法 3</count></count> </div> <br>アイデア: 元の配列を分割して 1 つずつ出力するこの方法では、ランダムで反復することができず、より効率的です。 <br><br><strong></strong><br>コードをコピー<br><div class="codetitle"> <span> コードは次のとおりです:<a style="CURSOR: pointer" data="82761" class="copybut" id="copybut82761" onclick="doCopy('code82761')"><u> </u><script type="text/javascript "> </a>var count=3000; </span>varoriginalArray=new Array;//元の配列</div>//元の配列に値を代入しますoriginalArray<div class="codebody" id="code82761">for (var i=0;i<count i>originalArray[i]=i 1; <br>} <br>var d1=new Date().getTime(); <br>originalArray.sort(function(){ return 0.5 - Math.random (); }) ; <br>for (var i=0;i<count>document.write(originalArray[i] " , "); <br>var d2=new Date().getTime (); <br>document.write("時間がかかる操作" (d2-d1)); <br><br> <br>パフォーマンス: 229 ミリ秒かかります。 <br>パフォーマンス分析を通じて、方法 3 が最良の解決策であると結論付けられました。</count></count> </div>