簡體   English   中英

Firefox Array.prototype.sort - 這種行為是否正確?

[英]Firefox Array.prototype.sort - is this behaviour correct?

我注意到 Firefox 中有一種奇怪的排序行為。 在控制台上運行以下代碼:

[1,2,3].sort ( (a,b) => 1 )

在 Chrome / Chromium(在 linux 和 Windows 上)我得到[1,2,3]

在邊緣我得到[1,2,3]

在 FireFox(在 Linux 和 Windows 上)我得到[3,2,1]

這是 Firefox 的錯誤行為嗎?

您的排序比較器函數不遵守此類函數的要求,因此行為未定義。 比較器函數必須始終為任何一對元素返回相同的“結論”值,無論元素作為參數傳遞的順序如何。 您的函數向內部排序算法指示(例如)1 應該出現在 2 之后,但 2 也應該出現在 1 之后。由於這種不一致,您會得到錯誤的結果。

比較器可以做任何它想做的事情,但是對於數組ab中的任意兩個元素,結果應該是

  • -1(或任何負數)如果a應該出現在排序數組中的b之前;
  • 1(或任何正數)。如果B應前所述排序后的數組中出現;
  • 0 如果元素已經在正確的順序

這對於兩個元素來說必須是正確的,無論它們實際上是如何傳遞到比較器中的,並且無論相同的兩個元素被比較多少次,它都必須是一致的。

編輯——實際上結果只需要有正確的符號; 它們實際上不必是 1 或 -1,只是一個負值或正值。 這使得比較數字更容易,因為a - b給出了正確的結果(負數、正數或零)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM