指明了 compareFunction,那么数组会按照该函数的返回值排序,即 a 和 b 是两个将要被比较的元素
如果 compareFunction(a, b) 小于 0,那么 a 会被排列到 b 之前;
如果 compareFunction(a, b) 大于 0,那么 b 会排列到 a 之前;
如果 compareFunction(a, b) 等于 0,那么 a 和 b 的相对位置不变。
三、几种最常见的排序方式
升序、降序排序
// 按照上面的规则,来写个升序排序,那就 so easy 了,对吧
const array = [-2, 27, 0, -5, -4]
array.sort((a, b) => {
if (a > b) {
return 1
} else if (a < b) {
return -1
} else {
return 0
}
})
console.log(array) // [-5, -2, 0, 4, 27]
// 简写
// array.sort((a, b) => a - b)
// 降序也是同理
// array.sort((a, b) => b - a)
在项目开发当中,对数组的排序肯定少不了,类似的升序排序肯定都见过。
可你又追究过 sort() 里面是怎么实现的吗?
sort()
方法用 原地算法 对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后会按照转换为的字符串的每个字符的 Unicode 位点进行排序。净看概率,可能会有点难理解,然后下面结合代码理解。
一、没有参数
为什么
arr3
进行排序之后,返回的为什么不是[-2, -5, 0, 4, 27]
呢?结合概念来看,其实就没那么难理解了。首先我们没传参数,即采用默认排序方式,它会将每一个元素转化为字符串,接着按照字符串的每个字符的 Unicode 位置进行排序。
所以,在比较
27
和4
时,它会先比较2
和4
,发现2
的 Unicode 顺序要比4
靠前,所以最终的结果是27
在4
之前。同样的道理,负数在前是因为-
的 Unicode 顺序更靠前。(附 ASCII 对照表)二、带参,且必须是函数
其实默认的排序方式在实际的应用中,很多不能满足我们的排序要求,所以 sort 也提供了一个参数
comparFunction
,来满足我们的各种需求。指明了
compareFunction
,那么数组会按照该函数的返回值排序,即a
和b
是两个将要被比较的元素compareFunction(a, b)
小于0
,那么a
会被排列到b
之前;compareFunction(a, b)
大于0
,那么b
会排列到a
之前;compareFunction(a, b)
等于0
,那么a
和b
的相对位置不变。三、几种最常见的排序方式
The end.