前言
近期在使用Array的sort api排序的遇到了问题,所以花了些时间研究它,这里记录下供参考。
Demo
1 |
|
上面的例子很简单,大家在日常业务中应该会用到,结果也显而易见,把 ary 按降序排列;如果改变排序条件prev - nex > 0 ? 1 : -1, 结果就会变成把ary按升序排列。
解析
这里逐步分析一种降序的情况。array.sort也是遍历array的过程,期间申请变量存放中间数据,最终将中间数据赋值给array改变原数据。
开始分析:
- 先赋值一个空数组对象
temp = [] - 开始比较
prev = 90,next = 89,90 - 89 > 0,return 1,temp = [90, 89] - 开始比较
prev = 89,next = 44,89 - 44 > 0,return 1,temp = [90, 89, 44] - 开始比较
prev = 44,next = 92,44 - 92 < 0,return -1,temp = [90, 89, 92, 44] - 开始比较
prev = 89,next = 92,89 - 92 < 0,return -1,temp = [90, 92, 89, 44] - 开始比较
prev = 90,next = 92,90 - 92 < 0,return -1,temp = [92, 90, 89, 44] - 开始比较
prev = 44,next = 123,44 - 123 < 0,return -1,temp = [92, 90, 89, 123, 44] - 开始比较
prev = 89,next = 123,89 - 123 < 0,return -1,temp = [92, 90, 123, 89, 44] - 开始比较
prev = 90,next = 123,90 - 123 < 0,return -1,temp = [92, 123, 90, 89, 44] - 开始比较
prev = 92,next = 123,92 - 123 < 0,return -1,temp = [123, 92, 90, 89, 44] - 开始比较
prev = 44,next = 99,44 - 99 < 0,return -1,temp = [123, 92, 90, 89, 99, 44] - 开始比较
prev = 89,next = 99,89 - 99 < 0,return -1,temp = [123, 92, 90, 99, 89, 44] - 开始比较
prev = 90,next = 99,90 - 99 < 0,return -1,temp = [123, 92, 99, 90, 89, 44] - 开始比较
prev = 92,next = 99,92 - 99 < 0,return -1,temp = [123, 99, 92, 90, 89, 44] - 遍历结束,得到结果
[123, 99, 92, 90, 89, 44]
小结
原来是这么一个过程,大家了解一点是一点吧,还可以自己写一些排序方法,比sort更快更稳妥。