如何解决JavaScript数组排序稳定性的差异?_达内广州web培训

广州web培训
达内广州五羊中心

18589266248

热门课程

如何解决JavaScript数组排序稳定性的差异?

  • 时间:2016-12-24 17:36
  • 发布:广州web培训
  • 来源:拿客

达内广州前端开发培训在正文开始之前先提一个问题:如果我的项目就是需要依赖稳定排序,那该怎么办呢?

解决方案

其实解决这个问题的思路比较简单。

浏览器出于不同考虑选择不同排序算法。可能某些偏向于追求极致的性能,某些偏向于提供良好的开发体验,但是有规律可循。

从目前已知的情况来看,所有主流浏览器(包括IE6,7,8)对于数组排序算法的实现基本可以枚举:

归并排序/ Timsort

快速排序

所以,我们将快速排序经过定制改造,变成稳定排序的是不是就可以了?

一般来说,针对对象数组使用不稳定排序会影响结果。而其他类型数组本身使用稳定排序或不稳定排序的结果是相等的。因此方案大致如下:

将待排序数组进行预处理,为每个待排序的对象增加自然序属性,不与对象的其他属性冲突即可。

自定义排序比较方法compareFn,总是将自然序作为前置判断相等时的第二判断维度。

面对归并排序这类实现时由于算法本身就是稳定的,额外增加的自然序比较并不会改变排序结果,所以方案兼容性比较好。

但是涉及修改待排序数组,而且需要开辟额外空间用于存储自然序属性,可想而知v8这类引擎应该不会采用类似手段。不过作为开发者自行定制的排序方案是可行的。

广州Web前端培训就到广州达内,详情请登陆广州达内Web前端培训官网(gz.web.tedu.cn)!

上一篇:如何设计一个“优雅”的搜索功能?
下一篇:如何理解JavaScript 数组slice与splice?

马上预约三天免费体验课

姓名:

电话:

如何解决JavaScript数组排序稳定性的差异?

选择城市和中心
贵州省

广西省

海南省