2016-11-16 58 views
1

我有元件的陣列如下:JS排序的多約束

var a = [ 
    <tr data-order=​"0" data-time=​"840">​…​</tr>​, 
    <tr data-order=​"0" data-time=​"60">​…​</tr>​, 
    <tr data-order=​"1" data-time=​"10">​…​</tr>​, 
    <tr data-order=​"2" data-time=​"20">​…​</tr>​, 
    <tr data-order=​"3" data-time=​"15">​…​</tr>​, 
    <tr data-order=​"4" data-time=​"40">​…​</tr>​, 
    <tr data-order=​"5" data-time=​"30">​…​</tr>​, 
    <tr data-order=​"6" data-time=​"1320">​…​</tr>​ 
] 

我想根據數據階以及數據時對它們進行排序。有什麼我能做到的是:

a.sort(function(m, n) { 
    return parseInt($(m).attr("data-order")) - parseInt($(n).attr("data-order")) 
}); 

這給了我通過日期順序排序元素,但對於同一日期的順序,我希望它通過日期 - 時間進行排序。

如何按多個屬性進行排序?

回答

5

如果差值爲零(即值相同),則進行第二次比較。您可以使用logical OR (||)來減少行數。爲了獲得data- *屬性,使用方法data(),並且不需要解析它,因爲我們正在改變。

a.sort(function(m, n) { 
    return $(m).data('order') - $(n).data('order') || $(m).data('time') - $(n).data('time'); 
}); 

參見:What does the construct x = x || y mean?