Array sort

前言

近期在使用Array的sort api排序的遇到了问题,所以花了些时间研究它,这里记录下供参考。

Demo

1
2
3
4
5
6
7
8

let ary = [90, 89, 44, 92, 123, 99];

ary.sort((prev, next) => {
return prev - next > 0 ? -1 : 1;
})

console.log(ary); // [123, 99, 92, 90, 89, 44]

上面的例子很简单,大家在日常业务中应该会用到,结果也显而易见,把 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更快更稳妥。