JS按多个约束排序

时间:2016-11-16 09:52:48

标签: javascript jquery

我有一系列元素如下:

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

这为我提供了按日期顺序排序的元素,但对于相同的日期顺序,我希望按日期时间排序。

如何按多个属性排序?

1 个答案:

答案 0 :(得分: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?