JS での非反復乱数の生成は、さまざまな手法を使用して実現できます。もともと、このアプローチは、新しく生成された数値がすでに作成されているかどうかを、配列に追加して比較することで確認することでした。ただし、過剰な再帰呼び出しにより、「最大呼び出しスタック サイズを超えました」エラーが発生する可能性があります。
効率的な解決策は、ランダム化された数値リストを 1 回生成し、それを順番に処理することです。このアプローチにより、再帰呼び出しの必要性がなくなり、繰り返しがないことが保証されます。
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]);
この目的のためにジェネレーターを使用することもできます:
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
...
これらの手法は、JavaScript で非繰り返しの乱数を生成する効率的な方法を提供し、過剰な再帰呼び出しに関連する問題を排除します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3