首先对数组的sort方法进行简单的介绍,截图来自w3c

好吧,可能有同学看得比较懵懂。我用通俗易懂的人话翻译下。sort(sortby)方法中参数sortby必须为一个函数,且这个函数必须含有两个参数,例如a,b。
举个栗子:sortby可以理解为这样的一个函数
function(a,b){
//代码
reture xxxx
}
其中a,b指代的是数组中的任意两项!
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
关于上面这段话的理解,就是如果返回的值为负数(习惯返回-1),则a在b前面;如果返回值为0,此时a和b的值相等(一般情况下不会返回0);如果返回值为正数(习惯返回1),则b在a前面。
1,如果a,b为数值。或者a,b的某一个属性值为数值。
栗子:
var arr = [ {'name' : 'abc','age' : 20}, {'name' : 'cde','age' : 19}, {'name' : 'dfc','age' : 25}, {'name' : 'bde','age' : 21}, ]; arr.sort(function(a,b){ return a.age - b.age;// 从小到大的顺序 //return b.age - a.age; 从大到小的顺序 }) console.log(arr);
注意 return a.age-b.age表示从小到大的顺序 return b.age-a.age表示从大到小的顺序

2,如果a,b不为数值。或者a,b的某一个属性值为非数值时。
此时,就不能单纯的通过数值比较大小。而是你自己根据标准进行判断,如果符合排在前面的标准则return -1,如果符合排在后面的标准就return 1。
var arr = [ {'name' : '123456','age' : 20}, {'name' : '12345','age' : 19}, {'name' : '123','age' : 25}, {'name' : '12','age' : 21}, ]; arr.sort(function(a,b){ var s = a.name.toLowerCase(); var t = b.name.toLowerCase(); if(s < t) return -1; if(s > t) return 1; }) console.log(arr);

最新评论