美文网首页
javascript array.sort兼容性问题

javascript array.sort兼容性问题

作者: SCQ000 | 来源:发表于2018-08-22 17:43 被阅读482次

    在开发过程中发现,各个浏览器上的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。

    最后,要说明的一点是,在业务开发过程中对于复杂的排序过程,比起处理兼容性问题不如手动写排序算法更加适合,反而能保证一致性。

    相关文章

      网友评论

          本文标题:javascript array.sort兼容性问题

          本文链接:https://www.haomeiwen.com/subject/msyyiftx.html