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
使用实例:
对于 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 } })