数组sort()详解
数组sort()
语法:arr.sort([compareFunction])
- compareFunction这个参数是可填可不填的
- compareFunction 是一个函数,用来指定按某种顺序进行排列的函数。
- 如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
- 该排序方法会改变原始数组
默认排序
1 | let arr1 = [40,5,2,3,1,6] |
升序
原理:sort()里面的函数返回值如果大于0,则a、b交换位置;(数组原本位置为a在b的前面)
如果返回值小于0,则a、b不交换位置;
如果返回值等于0,则a、b的位置不变。
1 | let arr = [40,5,2,3,1,6]; |
降序
原理和升序同理1
2
3
4
5
6
7
8
9
10
11
12
13
14let arr = [40,5,2,3,1,6];
arr.sort((a,b)=>{
if(a < b) {
return 1
}else if(a > b) {
return -1
}else if(a == b){
return 0
}
});
console.log(arr) // [ 40, 6, 5, 3, 2, 1 ]
//简写
arr.sort((a,b)=>b-a);
sort源码原理
在v8源码sort部分中,对于需要排序的元素个数n,具体排序策略有几下中情形:
- 当 n<=10 时,采用插入排序;
- 当 n>10 时,采用三路快速排序;
- 10< n <=1000,采用中位数作为哨兵元素;
- n>1000,每隔 200~215 个元素挑出一个元素,放到一个新数组中,然后对它排序,找到中间位置的数,以此作为中位数。
sort的其他语法
将数组的奇数和偶数分离
1 | let arr = [2,3,1,2,5,1,2] |
打乱数组
1 | let arr = [1,2,3,4,5,6,7] |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XXX17的个人博客!