js中Array类型重排序方法
这里讲到的重排序方法有 reverse 和 sort 两种方法,主要简单解释 sort 方法的比较原理
先从栗子入手吧~
这里有两个数组
var num1 = [ 4, 3, 2, 1, 0 ]
var num2 = [ 0, 1, 25, 9, 5, 2 ];
一、reverse方法
console.log(num2.reverse()); //2,5,9,25,1,0
reverse方法主要用于反转数组,将数组倒叙输出
二、sort方法
console.log(num1.sort()); //0,1,2,3,4
在上面这个栗子中,是我们经常使用 sort 方法遇到的情况,因此常常会有一个 sort 用于升序排序的误区,其实并不是这样的,例如下面这个栗子:
console.log(num2.sort()); //0,1,2,25,5,9
在这个栗子中,我们可以看到数组并没有像 num1 那样升序排序,这是因为 sort 的排序原理其实是 将每个元素调用 toString 方法后,进行字符串比较,也就是说,在 num2 进行比较的时候,是将 “0” , “1”, “2”, “25”, “5”, "9"来比较,比较字符串时总是从第一位开始比较的
console.log("25" < "5"); //true 从2开始和5比较,小于5,所以返回true
console.log("9" < "25"); //false 从9开始和2比较,大于2,所以返回false
console.log("2" < "25"); //true 从2和2开始比较,相同,继续比较,前面是个位数,后面是十位数,返回ture
因此在 num2 中,因为比较每个元素的字符串,所以 0 < 1 < 2 < 25 < 5 < 9
但如果我们需要通过 sort 单纯比较每个元素的数字类型大小,可以通过下面的方式
function compare(a,b){
if(a < b){
return -1; //前面的数字小于后面的数字,不需要交换,返回-1
}
else if(a > b){
return 1; //前面的数字大于后面的数字,需要交换,返回1
}
else { //如果都不是以上的情况,就是相等,不需要交换,返回0
return 0;
}
}
console.log(nums.sort(compare)); //0,1,2,5,9,25