2013-03-26 20 views
0

我想排序一個多維數組。 什麼我應該把JavaScript .sort()函數的回調,使其行爲像MySQL的順序?如何使在JavaScript中的排序功能行爲像mysql順序

例子。 通過,結果使用mysql命令:

acx, 
acx abx, 
acx acx, 
S&P/ASX 20 

使用JS排序功能,結果是:

S&P/ASX 20, 
acx, 
acx abx, 
acx acx 

謝謝。

+0

搜索'[javascript] string sort case''。 – 2013-03-26 07:11:44

回答

2

問題是JS中的排序區分大小寫。爲了解決這個問題,提供一個函數作爲sort的參數,它應該比較字符串的上層(或下層)版本。

function cmp(x, y) { 
    return x > y ? 1 : x < y ? -1 : 0; 
} 

a = ["S&P/ASX 20","acx", "acx abx","acx acx"] 

a.sort(function(x, y) { 
    return cmp(x.toUpperCase(), y.toUpperCase()) 
}) 
+0

它工作:)非常感謝。我沒有發現問題只是js區分大小寫。愚蠢的我。 – user2020835 2013-03-26 07:25:14

+0

@ user2020835:沒問題))順便說一句,在MySQL中排序可能是任何方式,這取決於您使用的排序規則。 – georg 2013-03-26 07:30:50

0

目前尚不清楚您的多維度,但您的示例看起來像他們只是沒有區分大小寫的排序。

在任何情況下,要獲得定製行爲,你做的是傳遞一個函數爲sort,用於比較的元素,返回-1,1或0。因此,例如:

yourArray.sort(function(a, b) { 
    a = a.toLowerCase(); 
    b = b.toLowerCase(); 
    if (a < b) { 
     return -1; 
    } 
    if (a > b) { 
     return 1; 
    } 
    return 0; 
}); 

如果你比較比較函數中的數組數組,您將比較ab中給出的兩個陣列中的各個條目。