首頁 > web前端 > js教程 > 為什麼在 JavaScript 陣列排序比較函數中傳回布林值是錯誤的:正確使用指南?

為什麼在 JavaScript 陣列排序比較函數中傳回布林值是錯誤的:正確使用指南?

Susan Sarandon
發布: 2024-12-19 10:43:11
原創
228 人瀏覽過

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

JavaScript 中用於數組排序的自訂比較函數:當布林返回值不夠時

雖然自訂比較函數通常用於修改陣列的預設字典順序,一個常見的誤解是簡單地從函數傳回true 或false 就足夠了。但是,這種方法是不正確的,可能會導致排序結果不可靠。

布林比較函數的問題

從比較函數傳回布林值的問題是它可能違反 JavaScript 規範中定義的「一致比較函數」的要求。一致的比較函數必須傳回一個數字(特別是 -1、0 或 1),指示比較元素的相對順序。

返回布林值而不是數字可能會導致意外行為:

  • 傳遞性違規: 函數function(a, b) { return a >;乙;當b 大於a 時回傳false,這表示b 應該排在a 之前。然而,當 a 和 b 相等時,函數也會傳回 false,這與傳遞屬性相矛盾,即如果 a 等於 b 且 b 小於 c,則 a 必須小於 c。
  • 未定義的排序順序: 從比較函數傳回 false 可能會導致未定義的排序順序。例如,排序[1, 1, 0, 2].sort(function(a, b) { return a > b; }) 可能會導致[0, 1, 1, 2] 或[1, 1, 0, 2 ] 取決於排序演算法的實作。

正確比較函數

為了確保排序一致且可靠,定義比較函數至關重要,該函數傳回一個表示比較元素相對順序的數字:

  • 一般比較函數: 字典序比較,通用函數可以定義為function(a, b) { if (a b) 回傳1;否則回傳0; }.
  • 數字比較:為了比較數字,可以使用更簡單的函數: function(a, b) { return a - b; }.
  • 按特定屬性進行比較:要按特定屬性對物件或陣列進行排序,函數可以存取該屬性並比較其值: function(a, b) { return a . name.localeCompare(b.name); } 用於依物件名稱排序。

結論

雖然在 JavaScript 中使用布林值傳回比較函數可能很誘人,但遵循一致比較函數的指定要求至關重要。這確保排序演算法可以正確比較元素並產生可靠且可預測的結果。

以上是為什麼在 JavaScript 陣列排序比較函數中傳回布林值是錯誤的:正確使用指南?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板