sort排序 数组下的对象 根据字母排序

5,466 阅读1分钟

sort()默认根据编码顺序进行排序。(详细的排序方法网上有很多了,这里做个简单介绍)

sort()可以传一个函数进行排序,返回正数负数0;

  • 如果a-b是负数a在前面;

  • 如果a-b相等则字符串相同;

  • 如果a-b正数b在前面;

简单来说就是a到b为正序,b到a为降序,要怎么排序直接记住这个就够了

看一个例子:

function sortNumber(a,b){
  return a - b
}
const arr = ['5','3','6','2','4']
arr.sort(sortNumber) //输出 ['2','3','4','5','6']

a-b就是从小到大正序,简单的数字排序,如果你遇到的是字母呢,或者是对象的属性

  • 对象

其实ab接收到的就是每个对比数组的item,你当然可以直接拿属性去做比较。

function sortNumber(a,b){
  return a.age - b.age
}
const arr = [{age:'5'},{age:'3'},{age:'6'},{age:'2'},{age:'4'}]
arr.sort(sortNumber) //输出  [{age:'2'},{age:'3'},{age:'4'},{age:'5'},{age:'6'}]
  • 字母

字母的话不能直接进行+-的比较排序。但是你已经知道了sort()接收正数负数0。你要什么排在前面就return一个对应的值,这完全没问题。

对了,忘记说两个字符串的比较也是根据字符编码的顺序来进行比较的。我们可以这样

function sortNumber(a,b){
    const aa = a.age;
    const bb = b.age;
    if(aa<bb){
        return -1;
    }else if(aa==bb){
        return 0;
    }else{
        return 1;
    }
}
const arr = [{age:'b'},{age:'d'},{age:'a'},{age:'e'},{age:'c'}]
arr.sort(sortNumber) //输出  [{age:'a'},{age:'b'},{age:'c'},{age:'d'},{age:'e'}]