Rumah >hujung hadapan web >tutorial js >Mengapa Nilai Pulangan Boolean Tidak Cukup untuk Fungsi Perbandingan Array.sort JavaScript?

Mengapa Nilai Pulangan Boolean Tidak Cukup untuk Fungsi Perbandingan Array.sort JavaScript?

Barbara Streisand
Barbara Streisandasal
2025-01-04 06:02:41159semak imbas

Why Isn't a Boolean Return Value Enough for JavaScript's Array.sort Comparison Function?

Bukankah Memulihkan Boolean Sudah Cukup untuk Fungsi Perbandingan dalam JavaScript?

Kaedah Array.sort JavaScript membenarkan fungsi perbandingan tersuai untuk menyusun elemen dan soalan biasa timbul: bolehkah fungsi perbandingan mudah mengembalikan boolean mencukupi untuk mengisih? Jawapannya dengan jelas tidak.

Mengapa Perbandingan Boolean Tidak Mencukupi

Fungsi perbandingan dalam JavaScript harus mematuhi peraturan berikut:

  • Kembalikan nombor: lebih besar daripada 0 jika a harus diisih selepas b, 0 jika sama, dan kurang daripada 0 jika a harus diisih sebelum b.
  • Tekal: Jika bandingkan(a, b) > 0, kemudian bandingkan(b, a) < 0, dan jika bandingkan(a, b) == 0, kemudian bandingkan(b, a) == 0.

Walau bagaimanapun, mengembalikan boolean tidak menjamin konsistensi. Contohnya, jika compare(a, b) mengembalikan palsu (atau setara, 0), ia membayangkan bahawa a sama ada sama dengan atau lebih kecil daripada b. Ini melanggar sifat transitiviti yang diperlukan untuk menyusun algoritma.

Contoh balas

Pertimbangkan fungsi perbandingan ini:

function compare(a, b) {
  return a > b;
}<p>Ia mengembalikan boolean: benar jika a lebih besar daripada b, dan palsu sebaliknya.</p>
<p>Menggunakan fungsi ini mengikut urutan, kami mempunyai:</p>
<pre class="brush:php;toolbar:false">[0, 1, 0].sort(compare); // [0, 1, 0] or [1, 0, 0] (varies between implementations)
[1, 1, 0, 2].sort(compare); // [0, 1, 2, 1] or [1, 1, 0, 2] (varies between implementations)

Hasilnya tidak konsisten kerana fungsi perbandingan tidak menguatkuasakan transitiviti.

Fungsi Perbandingan Betul

Untuk memastikan pengisihan yang konsisten, gunakan fungsi perbandingan yang mengembalikan nilai angka yang betul:

  • Leksikografik Isih: Gunakan sort() tanpa fungsi tersuai untuk rentetan ringkas atau pengisihan nombor.
  • Isih Numerik: Gunakan (a, b) => a - b untuk mengisih nombor dalam tertib menaik.
  • Isih Tersuai: Laksanakan fungsi perbandingan yang mengikut peraturan yang digariskan di atas, dengan mengambil kira sifat khusus yang ingin anda isih mengikut.

Dengan mengikut garis panduan ini, anda boleh memastikan gelagat pengisihan yang boleh dipercayai dan boleh diramal dalam kod JavaScript anda.

Atas ialah kandungan terperinci Mengapa Nilai Pulangan Boolean Tidak Cukup untuk Fungsi Perbandingan Array.sort JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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