javascript array.sort兼容性問題

在開發過程中發現,各個瀏覽器上的Array.prototype.sort內部算法實現機制不一樣,導致執行結果有偏差。
根據stackoverflow上的問答和維基百科上的結果,可以知道 chrome 目前採用快排(QuickSort)和插入排序(InsertaionSort),而對於火狐,它採用歸併排序(MergeSort)。而IE使用快排。

另外IE的sort 需要顯示聲明返回-1, 0, 1三種比較結果纔可正常工作,而Chrome, Firefox中可以直接返回true, false等。

[1,2,3].sort(function (a, b) { return true})

這段代碼,在chrome中將返回:

[3,2,1]

但是在IE裏數組順序並不會發現變化。
因此,兼容性寫法是:

[1,2,3].sort(function(a, b) {return b - a; });

確保回調函數中返回的結果是顯示的-1,0,1。

最後,要說明的一點是,在業務開發過程中對於複雜的排序過程,比起處理兼容性問題不如手動寫排序算法更加適合,反而能保證一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章