Apabila bercakap tentang pengisihan jadual, perkara pertama yang perlu dibincangkan mestilah pengisihan tatasusunan, kerana pengisihan tatasusunan ialah asas pengisihan jadual.
JavaScript menyediakan kaedah sort() untuk tatasusunan untuk pengisihan jadual Secara lalai, kaedah ini akan menyusun tatasusunan dalam susunan kod ASCII juga menyediakan kaedah terbalik() untuk tatasusunan.
Lihat contoh:
function sortArray(){
var arrayTest = ["z",5,2,"a",32,3];
arrayTest.sort();
makluman(arrayTest.toString()); //output:2,3,32,5,a,z
arrayTest.reverse();
makluman(arrayTest.toString()); //output:z,a,5,32,3,2
}
sortArray();
Haha, 5 adalah lebih besar daripada 32. Jelas sekali ini bukan hasil yang kita inginkan Seperti yang dinyatakan sebentar tadi, kaedah sort() disusun mengikut susunan kod ASCII.
Malah, kaedah sort() juga membenarkan parameter jenis fungsi, yang boleh kita panggil sebagai fungsi perbandingan Apabila fungsi perbandingan boleh menerima dua parameter, berikut ialah maksud nilai pulangan fungsi:
-1: Parameter pertama kurang daripada parameter kedua
0: Parameter pertama adalah sama dengan parameter kedua
1: Parameter pertama lebih besar daripada parameter kedua
/**
* Fungsi perbandingan
* @param {Objek} param1 Parameter 1 untuk dibandingkan
* @param {Objek} param2 Parameter 2 untuk dibandingkan
* @return {Nombor} Jika param1 >
* keluar boleh
* ...
*/
fungsi compareFunc(param1,param2){
//Jika kedua-dua parameter ialah jenis rentetan
Jika(jenis param1 == "rentetan" && jenis param2 == "rentetan"){
kembalikan param1.localeCompare(param2);
}
//Jika parameter 1 ialah nombor, parameter 2 ialah rentetan
Jika(jenis param1 == "nombor" && jenis param2 == "rentetan"){
pulangan -1;
}
//Jika parameter 1 ialah rentetan dan parameter 2 ialah nombor
Jika(jenis param1 == "rentetan" && jenis param2 == "nombor"){
Pulangan 1;
}
//Jika kedua-dua parameter ialah nombor
Jika(jenis param1 == "nombor" && jenis param2 == "nombor"){
Jika(param1 > param2) kembalikan 1;
Jika(param1 == param2) kembalikan 0;
Jika(param1 < param2) kembalikan -1;
}
}
Apabila kami melaksanakan arrayTest.sort(compareFunc) kami mendapat hasil yang betul.
Pada ketika ini, kita perlu menerangkan penggunaan kaedah localeCompare() Kaedah ini ialah kaedah pengisihan rentetan Ia hanya mempunyai satu parameter, iaitu rentetan untuk dibandingkan.
Arahan khusus adalah seperti berikut:
1 Jika objek String disusun mengikut abjad sebelum rentetan dalam parameter, nombor negatif dikembalikan
2. Jika objek String disusun selepas rentetan dalam parameter dalam susunan aksara, kembalikan nombor positif
3. Jika objek String adalah sama dengan rentetan dalam parameter, kembalikan 0
Selain itu, kaedah localeCompare() mempunyai satu lagi ciri unik, yang boleh dicerminkan dalam kaedah signature locale (tempatan, tempatan), yang bermaksud bahawa pelaksanaannya adalah berdasarkan ciri serantau , jika ia berada dalam sistem bahasa Inggeris , pelaksanaannya mungkin dalam susunan rentetan menaik, jika dalam bahasa Cina, pelaksanaannya mungkin mengikut pinyin huruf pertama.
Haha, ini bermakna walaupun kita melibatkan watak Cina dalam program, pengisihan kita tidak akan salah.
Rujuk prosedur berikut: