Penyusunan semula tatasusunan bermaksud mengganggu susunan semua elemen dalam tatasusunan.
Kaedah biasa ialah menghantar fungsi ke dalam kaedah isihan asli bagi tatasusunan Fungsi ini mengembalikan 1 atau -1 secara rawak untuk mencapai tujuan menyusun unsur tatasusunan secara rawak.
Walaupun kaedah ini intuitif, ia tidak begitu cekap Selepas ujian saya, masa yang diperlukan untuk merangkak susunan 10,000 elemen ialah kira-kira 35ms (firefox)
Saya sentiasa mempunyai kualiti yang baik untuk meminta jawapan, jadi saya mencari kaedah yang cekap. Lihat teks asal di sini
Kaedah ini menambah fungsi pada Array.prototype yang dipanggil shuffle - tetapi namanya tidak penting, yang penting ialah kecekapannya.
Ambil tatasusunan saya di atas yang mengandungi 10,000 elemen untuk menguji Ia hanya mengambil masa 7 atau 8 milisaat untuk menyelesaikan operasi luar pesanan menggunakan kaedah ini.
Tingkatkan elemen tatasusunan 10 kali ganda kepada 100000 untuk menguji Kaedah isihan pertama mengambil masa kira-kira 500 ms, dan kaedah shuffle mengambil masa kira-kira 40 ms.
Kod ujian penuh:
//Kaedah berikut adalah yang paling berkesan
jika (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j ] = x);
kembalikan ini;
};
}
var t = new Date().getTime();
arr.shuffle();
document.write('
' arr '
');
var t1 = new Date().getTime();
document.write(t1-t);
Selain itu, adakah anda perasan bahawa gelung for dalam kod shuffle tidak mempunyai separuh masa kedua! Iaitu, hanya ada untuk(..) tetapi tiada {..} di belakangnya. Ia boleh ditulis seperti ini! Dan ia sebenarnya dilaksanakan secara normal! Ia ingin tahu, saya perlu pergi ke taman blog dan bertanya.