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.
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; }
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; }
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; } });
Ini membolehkan anda hanya memanggil arr.shuffle() untuk mengocok tatasusunan bernama arr.
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);
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!