我有一系列元素,如下所示:

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") )
});


这给了我按日期顺序排序的元素,但是对于相同的日期顺序,我希望它按日期时间排序。

如何按多个属性排序?

最佳答案

在差异为零的情况下(即,值相同)进行第二次比较。您可以使用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?

10-07 19:40
查看更多