我不明白为什么数字排序功能在Javascript中工作

tay*_*ane 4 javascript arrays sorting

我知道.sort()方法按字母顺序对数组进行排序,就像它是一个字符串一样.即使你的阵列完全由数字组成.

我也明白,要以数字方式对数组进行排序,代码是:

myArray.sort(function (a,b) {
    return a-b;
});
Run Code Online (Sandbox Code Playgroud)

问题是我不明白为什么这样做.我写的函数应该带两个参数,'a'和'b',但这些参数来自哪里?阵列?怎么知道这样做?然后,该函数返回一些数字.如果'a'和'b'分别是10和5,我的函数将返回'5'.现在我正在做myArray.sort(5); 这怎么可能在数字上神奇地整理我的整个数组???

谢谢您的帮助.

dus*_*uff 5

我写的函数应该带两个参数,'a'和'b',但这些参数来自哪里?

为了确定数组元素所属的顺序,Array.sort函数从数组中选取元素对,并将它们作为a和传递给比较函数b.你的函数返回的结果决定了两个元素放在哪个顺序 - 如果它是负数,那么它知道要放在a前面b; 如果它是积极的,它知道放在a后面b.实际数字并不重要,只是它是负面的还是正面的.

编写示例的一种不那么令人困惑的方式可能是:

function myComparisonFunction(a, b) {
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }
    return 0;
}

myArray.sort(myComparisonFunction);
Run Code Online (Sandbox Code Playgroud)


Nih*_*hat 0

a 和 b 数组中两个连续的值进行比较和减法,可以是 0、小于零和大于零。如果大于零,则意味着前一个元素较大,因此如果小于零,则需要进一步向下推,这意味着它不需要被推下来。