Rumah >hujung hadapan web >tutorial js >Bagaimanakah Kita Boleh Memilih Item Susunan Rawak Dengan Cekap Tanpa Pengulangan?

Bagaimanakah Kita Boleh Memilih Item Susunan Rawak Dengan Cekap Tanpa Pengulangan?

Barbara Streisand
Barbara Streisandasal
2024-10-31 10:41:40241semak imbas

How Can We Efficiently Select Random Array Items Without Repetition?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn