Rumah > Artikel > hujung hadapan web > Bagaimanakah Kita Boleh Memilih Item Susunan Rawak Dengan Cekap Tanpa Pengulangan?
Pemilihan Rawak Yang Cekap Item Tatasusunan Tanpa Pengulangan
Dalam artikel ini, kami meneroka isu yang dihadapi oleh pengguna yang mencari kaedah yang cekap untuk memilih secara rawak item daripada tatasusunan tanpa pengulangan. Kod yang disediakan secara berkesan memilih item tetapi memperkenalkan kemungkinan gelung tak terhingga disebabkan oleh penggunaan fungsi rekursif.
Fungsi Rekursif?
Fungsi chooseName() boleh dianggap rekursif kerana ia merujuk kepada dirinya sendiri dalam definisinya. Syarat penamatan ialah penemuan item unik, di mana unik ditetapkan kepada palsu, memecahkan gelung dan memulakan panggilan fungsi semula.
Meningkatkan Kecekapan
Untuk meningkatkan kecekapan, kami mempertimbangkan pendekatan alternatif yang dicadangkan oleh pengulas @YuriyGalanter. Daripada bergantung pada fungsi rekursif, kita boleh memilih item secara rawak daripada tatasusunan dan menyimpannya dalam tatasusunan sementara. Setelah semua item dipilih, kami menetapkan semula tatasusunan sementara dan meneruskan proses pemilihan rawak.
Pelaksanaan
Pelaksanaan di bawah menggabungkan pendekatan ini:
<code class="javascript">function randomNoRepeats(array) { var copy = array.slice(0); return function() { if (copy.length < 1) { copy = array.slice(0); } var index = Math.floor(Math.random() * copy.length); var item = copy[index]; copy.splice(index, 1); return item; }; } var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']); chooser(); // => "Bar" chooser(); // => "Foo" chooser(); // => "Gah" chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>
Dengan menggunakan fungsi ini, item boleh dipilih secara rawak tanpa potensi untuk gelung tak terhingga sambil mengelakkan isu pengulangan.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Memilih Item Susunan Rawak Dengan Cekap Tanpa Pengulangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!