Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Kocok Tatasusunan dalam JavaScript Dengan Cekap Menggunakan Algoritma Fisher-Yates?

Bagaimanakah Saya Boleh Kocok Tatasusunan dalam JavaScript Dengan Cekap Menggunakan Algoritma Fisher-Yates?

DDD
Lepaskan: 2024-12-27 21:24:17
asal
376 orang telah melayarinya

How Can I Efficiently Shuffle an Array in JavaScript Using the Fisher-Yates Algorithm?

Pengocokan Tatasusunan yang Cekap Menggunakan Algoritma Fisher–Yates

Dalam JavaScript, shuffling tatasusunan ialah operasi biasa yang sering digunakan dalam rawak atau pembangunan permainan. Untuk mengocok tatasusunan dengan berkesan, algoritma Fisher–Yates yang popular menyediakan pendekatan yang cekap.

Pelaksanaan Algoritma Fisher–Yates

Prinsip teras di sebalik algoritma ini melibatkan pertukaran elemen berulang kali daripada tatasusunan dengan dipilih secara rawak elemen. Proses ini berterusan sehingga semua elemen telah ditukar. Kod berikut melaksanakan algoritma ini:

/**
 * Shuffles an array in place.
 * @param {Array} a Array containing the elements to be shuffled.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}
Salin selepas log masuk

Versi ES6

Dalam ES6, kod boleh dipermudahkan menggunakan tugasan memusnahkan:

/**
 * Shuffles an array in place. ES6 version.
 * @param {Array} a Array containing the elements to be shuffled.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}
Salin selepas log masuk

Pelaksanaan Prototaip Array

Untuk meningkatkan kebolehbacaan kod, anda boleh menambah fungsi shuffle sebagai kaedah prototaip untuk tatasusunan:

Object.defineProperty(Array.prototype, 'shuffle', {
    value: function() {
        for (let i = this.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [this[i], this[j]] = [this[j], this[i]];
        }
        return this;
    }
});
Salin selepas log masuk

Ini membolehkan anda hanya memanggil arr.shuffle() untuk mengocok tatasusunan bernama arr.

Contoh Penggunaan

Untuk menggunakan fungsi shuffle, anda boleh menyediakan pelbagai elemen sebagai input, seperti:

let myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
shuffle(myArray);
Salin selepas log masuk

Fungsi shuffle akan susun semula unsur-unsur dalam myArray secara rawak. Fungsi ini amat berguna dalam senario di mana anda memerlukan data rawak atau kocok kad dalam permainan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kocok Tatasusunan dalam JavaScript Dengan Cekap Menggunakan Algoritma Fisher-Yates?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan