数组排序

sort

该方法用原地算法对数组的元素进行排序,并返回数组。排序算法现在是稳定的。默认排序顺序是根据字符串Unicode码点。

那我们就用sort方法来对一对数组进行排序看一下

[9,8].sort()
[9,80].sort()
// [8,9]
// [80,9]
1
2
3
4

可以看到,在我们没有指明排序函数的时候,数组中的数字会先被转化成字符串,然后在通过Unicode的比较来进行排序, 而Unicode顺序上 "80" 要比 "9" 要靠前,所以会出现上面的结果。

一般情况下,我们在应用sort方法时会指定排序函数,并且sort的排序函数内部规定,如果a-b为小于0,那么 a 会被排列到 b 之前;如果a-b等于0, a 和 b 的相对位置不变; 如果a-b大于0,b 会被排列到 a 之前。所以,正确的排序方法为:

// 数字排序
[9,80].sort((a, b) => a - b)
// [9,80]

// 字符串排序
['A','c','B'].sort((a, b) => {
    let arg1 = a.toUpperCase()
    let arg2 = b.toUpperCase()
    if (arg1 < arg2) {
        return -1;
    }
    if (arg1 > arg2) {
        return 1;
    }
    return 0;
})
// ['A','B','c']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上次更新: 4/21/2019, 12:39:26 PM