数组排序。争论来自哪里?

时间:2012-06-05 15:52:55

标签: javascript

在这个排序函数中,参数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]);
}

3 个答案:

答案 0 :(得分:3)

  

它们会自动通过吗?

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

答案 1 :(得分: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]arguments[1],代表阵列中应该比较的两个项目。此比较的返回值应为-101

答案 2 :(得分:0)

排序算法包括两个部分 - 选择重排逻辑和元素比较逻辑。 Javascript运行时库将处理pick-rearrange逻辑(例如快速排序),当它选择两个元素并需要比较结果时,它将调用array.sort参数中的函数来获取它。