2012-05-01 169 views
5

我有一個數組ItemMyArrayOfItems對象有看起來像這樣的對象:JavaScript的排序數組雙排序

Item 
{ 
    ContainerID: i, // int 
    ContainerName: 'SomeName', // string 
    ItemID: j, // int 
    ItemName: 'SomeOtherName' // string 
} 

我想,這樣它是由ContainerID按字母順序排序,然後通過ItemName這個數組排序。

我有一個自定義排序功能,到目前爲止是這樣的:

function CustomSort(a, b) { 

    Item1 = a['ContainerID']; 
    Item2 = b['ContainerID']; 

    return Item1 - Item2; 
} 

MyArrayOfItems.sort(CustomSort); 

這種種的數據筒,但我怎麼然後排序ITEMNAME?

謝謝。

+0

[由兩個場的Javascript排序陣列]的可能重複(http://stackoverflow.com/questions/6129952/javascript-sort-array-by-two-fields) –

+0

@FelixKling:不是真的;我需要它按字母順序排序。 – frenchie

+0

那麼?儘管我同意'localCompare'是一種更好的方法,你可以很容易地將蜇傷與'<' and '>'進行比較。我認爲整體問題是關於如何按兩種屬性排序,在這種情況下,它顯然是重複的。 –

回答

6

使用String.localeCompare函數。並在abContainerID相等時使用它。

function CustomSort(a, b) { 
    var Item1 = a['ContainerID']; 
    var Item2 = b['ContainerID']; 
    if(Item1 != Item2){ 
     return (Item1 - Item2); 
    } 
    else{ 
     return (a.ItemName.localeCompare(b.ItemName)); 
    } 
} 

要調整排序順序,你可以隨時把-任何return表達的前面。

+0

LocalCompare是否在IE8中工作? – frenchie

+0

它應該。就像它在JavaScript 1.2中很老。 –

+0

localcompare是一個不錯的選擇,但正如我記得chrome有問題.http://code.google.com/p/v8/issues/detail?id = 459 –

4
function CustomSort(a, b) { 

    Item1 = a['ContainerID']; 
    Item2 = b['ContainerID']; 
    if(Item1 - Item2 !=0){ 
     return Item1 - Item2; 
    } 
    else{ 
     if (a.ItemName < b.ItemName) 
     return -1; 
     if (a.ItemName > b.ItemName) 
     return 1; 
     return 0; 
    } 
} 
+0

好的,謝謝。 upvoted因爲它也有效。儘管我更喜歡localeCompare。 – frenchie