2012-06-05 35 views
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]); 
} 
+0

'a'和'b'具有数组中每对元素的值。 –

+0

只是你知道,你的代码是错误的。根据“a”是否小于“b”,分拣机应该返回“-1”或“1”,如果它们相等,则返回“0”。你的代码正在做的是返回'0'或'1'。所以如果脚本比较'X'和'Y',那么会被告知'Y> X'和'X == Y',这是不合逻辑的,所以结果是未定义的。将'?1:-1;'添加到每个'return'行的末尾。 –

回答

3

他们是否自动通过?

是的。

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

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

0

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