2011-08-23 64 views
18

我有以下形式的對象的數組:的Javascript排序定製比較器功能 - 排序排序後的數組

arr[0] = { 'item1' : 1234, 'item2' : 'a string' }; 

我首先通過'item1'則是直接排序。現在我想再次排序arr(它是按'item1'排序),但是這次是'item2',但僅適用於'item1'相同的元素。最終的陣列看起來像:

arr = [ 
    { 'item1' : 1234, 'item2' : 'apple' }, 
    { 'item1' : 1234, 'item2' : 'banana' }, 
    { 'item1' : 1234, 'item2' : 'custard' }, 
    { 'item1' : 2156, 'item2' : 'melon' }, 
    { 'item1' : 4345, 'item2' : 'asparagus' } 
]; 

我試着寫一個排序函數對於第二種情況,像這樣:

arr.sort(function(a,b){ 
    if(a.item1 === b.item1){ 
    return a.item2 > b.item2 ? 1 : a.item2 < b.item2 : -1 : 0; 
    } 
}); 

我可以在一個函數的兩類組合以獲得最終的有序數組但有些情況下我只能按'item1''item2'排序。

+0

如果你管理的項目1,ITEM2排序,和他們兩個,那麼你在問什麼呢? –

+0

所以它喜歡寫一個裝飾模式,我說「新sortByItem2(新sortByItem1(ARR))」。我也想用它像sortByItem1(ARR)或sortByItem2(ARR)或「new sortByItem1(new sortByItem2(ARR))」 – fenderplayer

回答

26

你可以有四個不同的比較功能 - 一個按item1排序,一個按item2排序,一個按item1然後item2,一個按item2然後item1。

例如爲:

arr.sort(function(a,b){ 
    if(a.item1 == b.item1){ 
    return a.item2 > b.item2 ? 1 : a.item2 < b.item2 ? -1 : 0; 
    } 

    return a.item1 > b.item1 ? 1 : -1; 
}); 
+0

這是多麼簡單的人可以使用比較器在JavaScript中的排序函數。 – cyan