在项目中会常常遇到给数组、对象排序的问题,这里做个详解供大家参考~

一、sort()函数

sort()是JavaScript内部提供的函数,用于对数组进行排序。它有两种形态用法:
1、sort():不加任何参数的情况下,函数默认根据字符编码顺序自动进行升序排列。

var arr = [23,35,25,46,12];
arr.sort(); //结果为[12,23,25,35,46]

似乎没什么问题,但换个数组再看看:

var arr = [23,35,2,46,12];
arr.sort(); //结果为[12,2,23,35,46]

问题显而易见,排序出现错乱,这也不是无厘头的错,毕竟人家是根据字符编码顺序排序,第一位数字‘1’优先‘2’。可我们要的不是这样,如何解决?看第二种。

2、sort(sortby):往里面添加参数,该参数必须是方法(函数)!用于指定sort()以何种标准进行升序排序。注意,sort(sortby)其实有个隐藏的规则用于判断顺序:
sortby返回负数:a<b;
sortby返回0:a=b;
sortby返回正数:a>b;

var arr = [23,35,2,46,12];
var sortby = function(a,b){
return a-b;
};
arr.sort(sortby); //结果为[2,12,23,35,46]

二、reverse()函数

reverse()函数用于将数组逆序排列。无关大小,仅根据原顺序逆向输出:

var arr = [23,35,2,46,12];
var tt = $('#t');
tt.text(arr.reverse()); //结果为[12,46,2,35,23]

三、如何降序?

刚刚讲到的sort()和reverse()都是常用的排序方法,可是它内置功能只默认升序,万一我们要降序可咋搞?这里有两种方法:
1、sort(sortby)逆向思维。刚提到它其实有根据返回正负数或0来判断大小的隐藏规则,那么我们只需要取返回数的相反值就可以令sort(sortby)进行错误判断从而达到降序的效果:
sortby返回负数:a>b;
sortby返回0:a=b;
sortby返回正数:a<b;

var arr = [23,35,2,46,12];
var sortby = function(a,b){
return -(a-b);
};
arr.sort(sortby); //结果为[46,35,23,12,2]

2、另一种方法是将已经按照升序排列的数组放入reverse()中也可以达到降序的效果:

var arr = [23,35,2,46,12];
var sortby = function(a,b){
return a-b;
};
tt.text(arr.sort(sortby).reverse()); //结果为[46,35,23,12,2]

四、对象数组的排序

对数组排序是简单不过了,但如果数组内每个单位都是一个对象呢?在项目开发常常遇到这种情况,对员工、学生等等对象排序,每个对象内包含许多属性。并不难,举个例子,我现在要对四个学生按照学号进行升序排列:

var arr = [
{name:'小红',num:'2'},
{name:'小明',num:'3'},
{name:'小强',num:'1'},
{name:'小刚',num:'4'}
];
var sortby = function(arr,key){
return arr.sort(function(a,b){
var a1 = a[key];
var b1 = b[key];
return (a1-b1);
});
};
console.log(sortby(arr,'num'));
/* 0: Object { name: "小强", num: 1 }
   1: Object { name: "小红", num: 2 }
   2: Object { name: "小明", num: 3 }
   3: Object { name: "小刚", num: 4 }
   length: 4
*/

这就完成了!这个sortby(arr,key)是我个人常常会用的一个模版,有兴趣的朋友可以采纳。其实就是导入要排序的数组arr和排序标准的属性key,sort(fun)通过fun(a,b)指定key比较大小升序的规则,最后层层返回一个最终升序数组。