数组排序的几个方法

冒泡排序

将数组进行循环,将两个相邻元素进行比较,如果两者之间,一方大于(小于)另一方则交换位置,重复的次数为数组的长度 -1次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 冒泡排序(从小到大)
function sortArr (arr) {
// 控制循环多少次
for (let i = 0; i < arr.length-1; i++) {
// 控制比较
for (let j = 0; j < arr.length; j++) {
// 一次循环中,如果前者大于后者就交换位置,所以第一次循环最大的就在最后
if (arr[j] > arr[j + 1]) { // 要从大到小排序的话,把 > 改为 < 就可以了
// 交换位置
const element = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = element
}
}
}
}

const arr = [9, 3, 10, 6, 2, 8]
sortArr(arr) // [2, 3, 6, 8, 9, 10]

sort()

sort() 方法用原地算法对数组的元素进行排序,并返回数组。

1
2
const arr = [9, 3, 10, 6, 2, 8]
arr.sort() // [10, 2, 3, 6, 8, 9]

可以看到,10排在了最前面,这是因为: sort方法取决于具体实现,因此无法保证排序的时间和空间复杂性。

解决方案
封装一个排序函数,然后将该函数当作参数传递给数组的sort方法

1
2
3
4
5
6
function sortArr(m, n) {
return m - n // 从小到大
return n - m // 从大到小
}
const arr = [9, 3, 10, 6, 2, 8]
arr.sort(sortArr)

根据数组里面的时间字符串排序

1
2
3
4
5
6
7
8
9
10
11
12
13
const data = [{
'id': '001',
'time': '2021-10-16'
},{
'id': '002',
'time': '2021-11-17'
},{
'id': '003',
'time': '2021-10-10'
},{
'id': '004',
'time': '2021-11-10'
}]

方法与sort中的方式相同,唯一的区别就是将时间进行转换然后排序

1
2
3
4
5
6
7
8
9
10
11
12
function sortData(data) {
// 正序
return data.sort(function(a, b) {
// 这里的 time 要根据本身的数据来,后面的正则匹配也要根据自己数据来
return Date.parse(a.time.replace(/-/g,'/')) - Date.parse(b.time.replace(/-/g,'/'))
})

// 倒序
return data.sort(function(a, b) {
return Date.parse(b.time.replace(/-/g,'/')) - Date.parse(a.time.replace(/-/g,'/'))
})
}

相关文档:https://blog.csdn.net/qq_41033913/article/details/90754217