最近の選択が繰り返されないように、配列から項目をランダムに選択する関数を考案しました。現在のソリューションは効果的に機能しますが、その効率性と過剰なループにつながる可能性について懸念があります。より効率的なアプローチを検討してみましょう。
1.再帰に関する考慮事項
はい、chooseName() 関数は、一意の名前が見つかるまで自身を呼び出すため、再帰的であると見なされます。再帰は特定の問題に役立つ場合がありますが、スタックの使用量と過剰な深さの可能性に注意することが重要です。
2.効率的な解決策
効率性の問題に対処するために、別の戦略を採用することができます。再帰に頼って一意の名前が見つかるまでループする代わりに、元の配列のコピーを作成し、すべての項目が選択されるまでそのコピーから項目をランダムに選択できます。すべての項目が使い果たされたら、コピーを元の状態にリセットします。
このアプローチの JavaScript 実装は次のとおりです。
function randomNoRepeats(array) {
var copy = array.slice(0);
return function() {
if (copy.length "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.
このアプローチでは、JavaScript の array slide() メソッドを利用して、元の配列の浅いコピーを作成します。次に、コピーからランダムな項目を繰り返し選択し、コピーからそれらを削除します。これにより、すべての項目が使い果たされるまで、繰り返しのないランダムな選択を効果的に模倣します。すべての項目を選択すると、コピーがリセットされ、ランダムな選択を再び開始できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3