sort和reverse都是函数重排序的方法,sort()是按升序排列数组,即从小到大排列。reverse()是将数组反转。
1、sort()
1、实现原理
sort方法调用数组的toString(),然后比较都得到的字符串确定最终如何排序。
2、sort()存在的问题
let testData = [1,20,10,15,6]
console.log(testData.sort()); // [1,10,15,6]
用sort方法输出的数据是[1,10,15,6],并不是我们想象中的[1,6,10,15],所以这是为什么呢?
其实原因很简单,本身sort是调用toString方法比较字符串更改,那sort调用toString方法之后就会变成 1,2,0,1,0,1,5,6
进行比较,然后在比较6和10的时候,会先比较第一位数据,即6和1,即使Number类型的10>6,但是变成字串的10<6,这就是原因所在。
3、sort()的解决办法
sort方法可以接收一个比较函数作为参数,方便我们指定数值的排序
1、升序
function compare (value1, value2) { // 方便sort进行正确合理的排序比对
if (value1 < value2) {
return -1
} else if (value1 > value2) {
return 1
} else {
return 0
}
}
let testData = [1,20,10,15,6]
console.log(testData.sort(compare)); // [1,6,10,15]
///这里更简单的写法是
function compare (value1, value2) {
return value1 -value2
}
函数要接收两个参数,在升序的情况下,如果参数1比参数2大,则返回1,小于则返回-1,等于则返回0。 比较函数可以用于大多数数据类型
2、降序
function compare (value1, value2) { // 方便sort进行正确合理的排序比对
if (value1 > value2) {
return -1
} else if (value1 < value2) {
return 1
} else {
return 0
}
}
// 这里更简单的写法是:
function compare (value1, value2) {
return value2 - value1
}
因为比较函数是通过返回一个>0、<0、或者=0的数值来影响排序的结果,所以运用减法就能达到这个效果。
这里的降序可能多此一举,知道数据排列正确,用reverse()
进行数据反转即可
4、返回值
reverse()和sort()方法的返回值都是经过排序之后的数组。