sort是一个很经常使用的排序方法,但经常我们会在各种算法题中看到不少写法。 像是
[3, 1, 5].sort((a, b) => a - b)
// [1, 3, 5] ↑升序
[3, 1, 5].sort((a, b) => b - a)
// [5, 3, 1] ↑降序
那么有一个问题,为什么a - b就是升序,b - a就是降序呢。
首先我们需要知道sort方法的第一个可选参数,sort(compareFn)。compareFn它是个定义排序顺序的函数。函数的返回值为一个数字。根据你返回的数值决定排序顺序:
| 返回值 | 含义 |
|---|---|
< 0 | a 排在 b 前面(a 更小) |
> 0 | a 排在 b 后面(a 更大) |
= 0 | 不变 |
这个含义和我们日常认知是一致的
- 负数表示 a < b
- 正数表示 a > b
- 0 表示 a == b
那么我们现在带入到:a - b
情况一:a 比 b 小
假设 a = 3;b = 10,那么 a - b = -7,即 a 排在 b 前面,小值a会在前面
情况二:a 比 b 大
假设 a = 10;b = 3,那么 a - b = 7,即 a 排在 b 后面,小值b会在前面
这样就能理解了吧,a - b 的时候,不管 a 和 b 的大小如何,小值都是会在前面,即是升序。