数组排序.论点从何而来

Array sorting. Where do the arguments come from?

本文关键字:数组排序      更新时间:2023-09-26

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

它们会自动传递吗?

是的。

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

这些会自动传递给您的排序函数。将它们的名称放在匿名函数的参数列表中只是为了方便。您可以通过记录 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

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