TIP
为什么sort a-b是升序 b-a是降序?
js sort排序使用方法(sort会修改原数组)
先看看具体执行
js
const arr = [2, 3, 1];
console.log(arr.sort((a, b) => a-b)); // 输出 [1, 2, 3]
console.log(arr.sort((a, b) => b-a)); // 输出 [3, 2, 1]
sort方法的参数是一个compareFunction,根据函数返回值来决定顺序
js
function compare(a, b) {
return a-b;
}
比较函数返回值有以下三种规则:
- 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
- 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变;
- 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
js
function compare(a, b) {
if (a < b ) {
return -1;
}
if (a > b ) {
return 1;
}
return 0;
}
为什么a-b是升序 b-a是降序
js
// 比较函数 参数a 为要比较的值 b 为被比较的值
// 拿上面的例子来看
const arr = [2, 3, 1];
arr.sort((a, b) => {
console.log(a , b);
return a-b;
})
// 输出如下
// 3 2
// 1 3
// 1 3 // 为什么会比较两次 1 3? 还未找到原因
// 1 2
// 根据输出结果可以看出,a, b的值与给定数组的顺序是反着的
// 由于大于 0, b 会被排列到 a 之前,
// 第一次比较 3 2 ,a=3 b=2, a-b=1 结果大于0 [2, 3, 1]
// 第二次比较 1 3,a=1 b=3, 1-3=-2,结果小于0 [2, 1, 3];
// 第四次比较 1 2,a=1 b=2, 1-2=-1, 结果 [1, 2, 3];
// 即然 a-b 为升序 那么 b-a 当然与之相反