在js中数组的用处很大,在很多地方都会用到数组,因为数组用起来比较方便,在数组中有的方法比较简单,有的比较复杂,今天介绍一个很常用但是又容易记混的方法:sort()方法。
这个方法可以直接使用:
var arr = [5,1,3,6,4,8,7,9];
var newArr = arr.sort();//[1,3,4,5,6,7,8,9]
会按照从小到大的顺序返回,是不是觉得很简单呢,我们再换一个数组试试
var arr = [5,6,3,1,9,7,10,15,45];
var newArr = arr.sort();// [1, 10, 15, 3, 45, 5, 6, 7, 9]
上面代码为什么会这样的,因为,sort()这个方法只能在10以下的数字进行排序,大于等于10就不行了,还好这个方法里面可以自定义函数,通过自定义的函数来决定是升序还是降序。
var arr = [5,6,3,1,9,7,10,15,45];
var newArr = arr.sort(function(a,b){
return a-b;
});
console.log(newArr);//[1, 3, 5, 6, 7, 9, 10, 15, 45]
这样输出的就是升序,反过来
var arr = [5,6,3,1,9,7,10,15,45];
var newArr = arr.sort(function(a,b){
return b-a;
});
console.log(newArr);//[45, 15, 10, 9, 7, 6, 5, 3, 1]
输出的就是降序,但是这个结果是怎么得来的呢?听我慢慢道来
在这里面函数的原理:看返回值:1.返回值为正,则交换两个数位置
2.返回值为负,则两个数不动。
3.为0 ,数组位置不变
var newArr = arr.sort(function(a,b){
if(a > b){
return 1;
}else{
return -1;
}
});
//这样写就是升序
var newArr = arr.sort(function(a,b){
if(a < b){ //在这里改一下就是降序
return 1;
}else{
return -1;
}
});
每次传入两个数分别赋予给a,b然后进行比较,按照上面的规则就可以按照自己想要的顺序排序,将上面代码简化一下:
var newArr = arr.sort(function(a,b){
if(a - b > 0){
return a-b;
}else{
return a-b;
}
});
在if里这样写就可以直接判断ab的大小,这样可以看出来,无论什么时候只要返回a-b就是升序,所以简化到最后就是
var newArr = arr.sort(function(a,b){
return a-b;
});
这就是这个函数的具体实现原理啦!