Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组排序。争论从何而来?_Javascript - Fatal编程技术网

Javascript 数组排序。争论从何而来?

Javascript 数组排序。争论从何而来?,javascript,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 {

在这个排序函数中,参数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]);
}
dir=“asc”
sortArray=新数组(“你好”,“链接到谷歌”,“zFile”,“aFile”);
//排序数组
如果(目录==“asc”){
sortArray.sort(函数(a,b){
返回a.toLowerCase()>b.toLowerCase()
});
}否则{
sortArray.sort(函数(a,b){
返回b.toLowerCase()>a.toLowerCase()
});
}
for(var i=0;i
它们是自动通过的吗

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
函数在需要比较两个对象时调用该函数

它们是自动通过的吗

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
函数在需要比较两个对象时调用该函数。

这些将自动传递给排序函数。在匿名函数的参数列表中为它们命名只是一种方便。通过记录
参数
集合,可以查看传递给函数的所有项:

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
这两个变量是
参数[0]
参数[1]
,表示数组中应该比较的两个项。此比较的返回值应为
-1
0
1
,这些值将自动传递给排序函数。在匿名函数的参数列表中为它们命名只是一种方便。通过记录
参数
集合,可以查看传递给函数的所有项:

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

这两个变量是
参数[0]
参数[1]
,表示数组中应该比较的两个项。此比较的返回值应为
-1
0
1
排序算法,包括两部分-拾取重排逻辑和元素比较逻辑。
Javascript运行库将处理拾取重排逻辑(例如快速排序),当它拾取两个元素并需要比较结果时,它将调用array.sort参数中的函数来获取它。

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

a
b
接受数组中每对元素的值。正如您所知,您的代码是错误的。分拣机应返回
-1
1
,具体取决于
A
是否分别小于
b
,或者
0
是否相等。代码正在执行的操作是返回
0
1
。因此,如果脚本比较
X
Y
,那么它将被告知
Y>X
X==Y
,这是不合逻辑的,因此结果是未定义的。增加
?1:-1
返回到每一行的末尾。
a
b
获取数组中每对元素的值。正如您所知,您的代码是错误的。分拣机应返回
-1
1
,具体取决于
A
是否分别小于
b
,或者
0
是否相等。代码正在执行的操作是返回
0
1
。因此,如果脚本比较
X
Y
,那么它将被告知
Y>X
X==Y
,这是不合逻辑的,因此结果是未定义的。增加
?1:-1到每个
返回
行的末尾。