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

使用 sort方法根据数组中对象的某一个属性值进行排序-射手猫的个人博客

好吧,可能有同学看得比较懵懂。我用通俗易懂的人话翻译下。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表示从大到小的顺序

使用 sort方法根据数组中对象的某一个属性值进行排序-射手猫的个人博客

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);
使用 sort方法根据数组中对象的某一个属性值进行排序-射手猫的个人博客