JavaScript 中 sort 函数 为什么 return a-b 就是升序?
在提出这个问题的时候也查阅了一些资料,了解到 v8 里的 sort 在不同的数组长度下采用不同的排序方式。
这里暂且我们就只考虑很基础的排序方式,也就是数组长度小于10的时候。
const arr= [1,2,3,4];
arr.sort((a,b)=>
{return a-b}
)
我了解到此时的情况 sort 会采用插值排序,但是了解过插值排序的逻辑以后,并没有发现和 sort 回调函数 的返回值 a-b 有什么关系。
百思不得其解,特来请教。
回复
1个回答

test
2024-06-28
你可以试着手写一个 sort()
,大致就明白了:
function sort<T>(arr: T[], compareFn?: (a: T, b: T) => number): T[] {
if (!compareFn) {
compareFn = (a, b) => (a + '').charCodeAt(0) - (b + '').charCodeAt(0);
}
const n = arr.length;
for (let i = 1; i < n; i++) {
for (let j = i; j > 0; j--) {
if (compareFn(arr[j], arr[j - 1]) < 1) {
[arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
} else {
break;
}
}
}
return arr;
}
// test
console.log(sort([3, 62, 10, 43]));
console.log(sort([3, 62, 10, 43], (a, b) => a - b));
console.log(sort([3, 62, 10, 43], (a, b) => b - a));
// [ 10, 3, 43, 62 ]
// [ 3, 10, 43, 62 ]
// [ 62, 43, 10, 3 ]
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容