用户工具

站点工具


JavaScript sort

function compare(a, b) {
  // 对文字排序只能对比后 return 是否大于 0,数字直接相减更方便
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

向 sort 函数 传入一个 compare 函数,sort 向 compare 提供两个参数 a,b

  • 当 compare 函数返回值小于 0,排序为 a b
  • 当 compare 函数返回值大于 0,排序为 b a
  • 当 compare 函数返回值等于 0,顺序不交换

使用实例:

递增

对于 a 和 b,运行的时候并不知道其大小,当你 return a-b 时,如果 a 大于 b,返回正数,b 大于 a,返回负数

也就是说,a 大于 b 时,顺序为 b a,a 小于 b 时,顺序为 a b

所以其实就是一个意思嘛,大的在后面,所以这就是递增的 compare 函数。

[1, 4, 3, 5, 6, 6, 3, 2, 5, 6, 3, 2, 5, 8, 9, 6, 5].sort((a,b)=>{
  return a - b  
})

递减

同理,b - a 大于 0 时,顺序是 b a,

b - a 小于 0 时,顺序是 a b,

也就是,小的在后面。

[1, 4, 3, 5, 6, 6, 3, 2, 5, 6, 3, 2, 5, 8, 9, 6, 5].sort((a,b)=>{
  return b - a
})

为对象排序

已对象内某个属性排序,原理依然一样

[{a:1},{a:17},{a:66},{a:5},{a:11},{a:2},{a:3}].sort((a,b)=>{
  return a.a - b.a
})

多属性排序

[{a:17,b:12},{a:17,b:21},{a:66,b:121},{a:5,b:1223},{a:17,b:92},{a:2,b:73},{a:3,b:6}].sort((a,b)=>{
    if(a.a === b.a){
        return a.b - b.b
    }
    return a.a - b.a
})

以上对比函数的功能是先以 a 属性排序,再以 b 属性排序,应该不难理解。

当 a 属性相等时,return a.b - b.b 为准,否则以 a.a - b.a 为准。

让某个值置于前

[{a:17,b:12},{a:17,b:21},{a:66,b:121},{a:5,b:1223},{a:17,b:92},{a:2,b:73},{a:3,b:6}].sort((a,b)=>{
    if(a.a === 17){
        return -1 
    }
})

sort 的运行原理

/opt/bitnami/dokuwiki/data/pages/javascript/sort.txt · 最后更改: 2021/01/12 02:42 由 superuser