Rumah > hujung hadapan web > tutorial js > Mengapa Mengembalikan Boolean dalam Fungsi Perbandingan Isih Tatasusunan JavaScript adalah Salah: Panduan untuk Penggunaan Yang Betul?

Mengapa Mengembalikan Boolean dalam Fungsi Perbandingan Isih Tatasusunan JavaScript adalah Salah: Panduan untuk Penggunaan Yang Betul?

Susan Sarandon
Lepaskan: 2024-12-19 10:43:11
asal
215 orang telah melayarinya

Why Returning Booleans in JavaScript Array Sort Comparison Functions is Wrong: A Guide to Correct Usage?

Fungsi Perbandingan Tersuai untuk Isih Tatasusunan dalam JavaScript: Apabila Pulangan Boolean Tidak Cukup

Sementara fungsi perbandingan tersuai sering digunakan untuk ubah suai susunan leksikografi lalai tatasusunan, salah tanggapan yang biasa ialah hanya kembali benar atau salah daripada fungsi itu sudah memadai. Walau bagaimanapun, pendekatan ini tidak betul dan boleh membawa kepada hasil pengisihan yang tidak boleh dipercayai.

Isu dengan Fungsi Perbandingan Boolean

Masalah dengan mengembalikan boolean daripada fungsi perbandingan ialah bahawa ia boleh melanggar keperluan untuk "fungsi perbandingan konsisten" seperti yang ditakrifkan dalam spesifikasi JavaScript. Fungsi perbandingan yang konsisten mesti mengembalikan nombor (khususnya, -1, 0, atau 1) yang menunjukkan susunan relatif elemen yang dibandingkan.

Memulangkan boolean dan bukannya nombor boleh mengakibatkan tingkah laku yang tidak dijangka:

  • Pelanggaran Transitiviti: Fungsi fungsi(a, b) { return a > b; } mengembalikan palsu apabila b lebih besar daripada a, membayangkan bahawa b harus diisih sebelum a. Walau bagaimanapun, fungsi itu juga mengembalikan palsu apabila a dan b adalah sama, yang bercanggah dengan sifat transitif yang menyatakan bahawa jika a bersamaan dengan b dan b adalah kurang daripada c, maka a mestilah kurang daripada c.
  • Tertib Isih Tidak Ditakrifkan: Mengembalikan palsu daripada fungsi perbandingan boleh menyebabkan tertib isihan tidak ditentukan. Contohnya, jenis [1, 1, 0, 2].sort(function(a, b) { return a > b; }) boleh mengakibatkan [0, 1, 1, 2] atau [1, 1, 0, 2] bergantung pada pelaksanaan algoritma pengisihan.

Perbandingan Betul Fungsi

Untuk memastikan pengisihan yang konsisten dan boleh dipercayai, adalah penting untuk menentukan fungsi perbandingan yang mengembalikan nombor yang mewakili susunan relatif elemen yang dibandingkan:

  • Fungsi Perbandingan Generik: Untuk perbandingan leksikografi, fungsi generik boleh ditakrifkan sebagai fungsi(a, b) { if (a < b) kembali -1; jika (a > b) kembalikan 1; yang lain kembalikan 0; }.
  • Perbandingan Nombor: Untuk membandingkan nombor, fungsi yang lebih mudah boleh digunakan: function(a, b) { return a - b; }.
  • Perbandingan mengikut Sifat Tertentu: Untuk mengisih objek atau tatasusunan mengikut sifat tertentu, fungsi boleh mengakses sifat tersebut dan membandingkan nilainya: function(a, b) { return a. name.localeCompare(b.name); } untuk mengisih mengikut nama objek.

Kesimpulan

Walaupun mungkin menarik untuk menggunakan pulangan boolean untuk fungsi perbandingan dalam JavaScript, adalah penting untuk mengikuti keperluan yang ditentukan untuk fungsi perbandingan yang konsisten. Ini memastikan algoritma pengisihan boleh membandingkan unsur dengan betul dan menghasilkan hasil yang boleh dipercayai dan boleh diramal.

Atas ialah kandungan terperinci Mengapa Mengembalikan Boolean dalam Fungsi Perbandingan Isih Tatasusunan JavaScript adalah Salah: Panduan untuk Penggunaan Yang Betul?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan