你所不知道的sort方法

说到快速排序,我们第一想到的一定是sort方法,但是,不要着急,在使用之前我们必须要了解sort方法到底是如何排序的。

例如: 我们对数组进行排序,我想我们的答案都是正确的。

let arr = [1,3,5,2,4]
arr.sort() // [1, 2, 3, 4, 5]

再看下面这一组

let arr = [5,22,8,36,1]
console.log(arr.sort()) //[1, 22, 36, 5, 8]

结果是不是和你预期的不一样呢,知其然,不知其所以然,所以今天刨根问底,一探究竟

为什么第二组排序会出现问题呢,原因如下:

1.js中的sort方法并不是按照我们数学中的1-10...,这样去依次排序的。

2.sort(默认升序),它会将排序的元素转为字符串,所以第二组的数组转变为 ['5','25','8','36','1'],

接下对应的字符串在计算机里找对应的Unicode码。

3.Unicode编码,数字的排序方式是 先整理1开头的,然后整理2开头的,依次,所以第二组数组就会出现问题。

那么有没有解决方案呢,当然有了,

1.定义一个比较器

function(x,y) {return x-y}  // 小于0,x移到y前面,大于0,移到y后面。等于0不变

let arr = [5,22,8,36,1]

arr.sort(function(x,y) {return x-y})// [1, 5, 8, 22, 36]

你学会了吗,每天进步一小点,加油!!!