0

这个排序函数中的参数 a 和 b 来自哪里?他们是自动通过的吗?

dir = "asc"
sortArray = new Array("hello", "Link to Google", "zFile", "aFile");

//sort array
if (dir == "asc") {
    sortArray.sort(function(a, b) {
        return a.toLowerCase() > b.toLowerCase()
    });
} else {
    sortArray.sort(function(a, b) {
        return b.toLowerCase() > a.toLowerCase()
    });
}

    for (var i = 0; i < sortArray.length; i++) {
    console.log(sortArray[i]);
}
4

3 回答 3

3

他们是自动通过的吗?

是的。

您正在创建一个匿名比较器函数,该sort函数在需要比较两个对象时调用该函数。

于 2012-06-05T15:55:39.200 回答
0

这些会自动传递给您的排序功能。将它们的名称放在匿名函数的参数列表中只是为了方便。arguments您可以通过记录集合来查看传递给您的函数的所有项目:

sortArray.sort(function() {
    console.log( arguments );
});

这导致以下日志:

["hello", "Link to Google"] // 0 vs 1
["Link to Google", "zFile"] // 1 vs 2
["zFile", "aFile"]          // 2 vs 3

这两个变量是arguments[0]and arguments[1],代表数组中应该比较的两个项目。此比较的返回值应为-101

于 2012-06-05T15:57:54.870 回答
0

Sorting algo including two parts - pick-rearrange logic and element comparison logic. Javascript runtime library will handle pick-rearrange logic (e.g. quick sort), and when it picking two elements and need a comparison result, it will call the function in the array.sort parameter to get it.

于 2012-06-05T16:02:13.383 回答