JavaScript 的 Array.sort 方法允許自訂比較函數對元素進行排序,以及一個常見問題出現:返回布林值的簡單比較函數是否足以進行排序?答案顯然是否定的。
JavaScript 中的比較函數應遵循以下規則:
但是,傳回布林值並不能保證一致性。例如,如果 Compare(a, b) 傳回 false(或等效地,0),則表示 a 等於或小於 b。這違反了排序演算法所需的傳遞性。
考慮這個比較函數:
function compare(a, b) { return a > b; }
它傳回布林值:如果 a 大於 b,則傳回 true,否則為 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)
結果不一致,因為比較函數不強制傳遞性。
為了確保排序一致,請使用傳回正確的數值:
透過遵循這些準則,您可以確保 JavaScript 程式碼中的可靠且可預測的排序行為。
以上是為什麼布林回傳值不足以用於 JavaScript 的 Array.sort 比較函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!