2012-05-01 67 views
0

我想通過兩個屬性對一個集合進行排序,其中一個是「complete」,它返回true或false,另一個是id,除非我需要一個屬性以降序排列。有沒有辦法做到這一點?主幹綜合排序問題

回答

2

是的,你可以做那樣的事情。集合的comparator需要一個參數或兩個參數函數:

比較器功能可以被定義爲一個sortBy(傳遞函數,它接受一個參數),或作爲sort(通過一個比較器功能需要兩個參數)。

你會想使用這兩個參數的形式,這樣的事情:

comparator: function(a, b) { 
    var ac = a.get('complete'); 
    var bc = b.get('complete'); 
    if(ac && !bc) 
     return 1; 
    if(!ac && bc) 
     return -1; 

    var as = a.get('seconds'); 
    var bs = b.get('seconds'); 
    if(as > bs) 
     return -1; 
    if(bs < as) 
     return 1; 

    return 0; 
} 

如果你有骨氣的舊版本不理解這兩個參數的comparator功能,那麼你」我們必須升級或想出一種方法來將completeseconds合併成一個單獨的排序鍵,這將與Underscore's sortBy正確排序。

+0

不錯。這個例子非常有幫助。再次感謝穆。 – jmk2142