2012-06-05 57 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參數中的函數來獲取它。