2013-07-30 167 views
0

當我想使用sort()函數對數組進行排序時,它會給出一個按字母順序排序的數組。例如,排序數組

var a=[9,10,1]; 
a.sort(); 

我越來越a = [1,10,9]

所以,按照建議我使用其他功能

function sortfunction(x, y){ 
    return (x - y) //causes an array to be sorted numerically and ascending 
} 

,然後使用

a.sort(sortfunction); 

,以獲得正確的結果。

任何人都可以詳細解釋,這是如何工作的?

+4

是不是在Javascript規範中有詳細解釋? – Barmar

+4

@巴爾瑪 - 一個參考將很方便 - [ECMA-262§15.4.4.11](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.11)。 – RobG

回答

3

第一個版本失敗,因爲他們比較像他們的字符串("9"大於"10"),被稱爲字典排序。

自定義比較器函數調用ab是數組的成員。

根據返回的內容,成員被移位。如果0返回,成員被認爲是等效的,如果是負數,則a小於b,如果它是正數則爲相反。

如果您想要將此可視化,您始終可以將ab記錄到控制檯,並觀察它們如何進行比較(並注意如何從未進行任何冗餘比較)。

這是所有支持的排序算法,這是留給實施選擇。例如,Chrome取決於成員的類型使用different algorithms

+0

它是如何工作的,如果x和y不一樣,x-y總是「真」 –

+0

什麼時候「x - y」是真的,如果它們是數字? – alex

+3

比較函數不是布爾值。它是三態:負數,0或正數。 – Barmar