比较函数如何在 sort() 数组方法中工作?

How does comparison function work in a sort() array method?

提问人:jlugada 提问时间:6/27/2023 更新时间:6/27/2023 访问量:40

问:

该代码用于整理数字值,但我对比较函数在 sort() 方法中的工作方式感到困惑。比较数组值“3”和“9”时。

值 3 不应该通过 sortNum(a,b) 中的参数“a”传递,而值 9 不应该通过参数“b”传递吗?但是console.log(返回“a”的“9”和“b”的“3”

let num = [3, 9, 1, 6]

function sortNum(a,b){
    console.log(a); // returns 9...
    console.log(b); // returns 3...
    return a-b;
}
num.sort(sortNum);
console.log(num); //returns sorted numbers [1, 3, 6, 9]

我期望console.log(a)有3而不是9,因为num数组的第一个值是3

JavaScript 数组排序 参数 比较

评论


答:

1赞 Quentin 6/27/2023 #1

有许多不同的排序算法。JS 规范不要求实现使用任何特定的规范。某些实现使用多个(例如,根据数组中的项目数优化短数组或长数组)。

您传递到的回调函数需要保持一致,并返回小于零、零或大于零的回调函数,具体取决于两个参数中的哪一个(如果任一)需要转发另一个参数)。sort()

如果 1 应该在 2 之前排序,那么 2 应该在 1 之后排序,排序算法以哪种方式将它们传递到回调函数中并不重要。

不同的实现可能会以不同的方式将它们输入到算法中。