sort()方法

40 阅读1分钟

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它是个定义排序顺序的函数。函数的返回值为一个数字。根据你返回的数值决定排序顺序:

返回值含义
< 0a 排在 b 前面(a 更小)
> 0a 排在 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 的大小如何,小值都是会在前面,即是升序