【问题标题】:Sort multidimensional array by multiple criteria按多个条件对多维数组进行排序
【发布时间】:2013-05-02 08:07:36
【问题描述】:
var data = [{
    "priority": "1",
    "date": "01.03.2013",
    "title": "Yeah hi"
}, {
    "priority": "2",
    "date": "",
    "title": "Another title"
}, {
    "priority": "2",
    "date": "22.12.2013",
    "title": "Foo"
}, {
    "priority": "1",
    "date": "10.04.2013",
    "title": "Hey there"
}, {
    "priority": "2",
    "date": "15.08.2013",
    "title": "Hello world"
},
...
]

我有一个多维数组,我想以复杂的方式对其进行排序。

  1. 按“优先级”排序 - 优先级最高的优先
  2. 然后按“日期”对具有相同优先级的所有项目进行排序 - 首先是今天附近的下一个日期(只有未来的日期)。如果某个项目没有日期,请将其放在最后。
  3. 按“标题”对具有相同日期的所有项目(以及所有没有日期的项目)排序 - 按字母顺序

第一步对 data.sort() 没有问题,但是我没有这样做的计划。该怎么做?

【问题讨论】:

  • 如果我只想按优先级排序,那将是重复的。但这不是我的问题……
  • 它是相同的原理 - 你编写自己的小比较函数,根据你的所有标准比较两个元素,直到它可以决定哪个“小于”另一个(或找出最终被认为是平等的)。

标签: javascript jquery sorting


【解决方案1】:

一种可能的解决方案

data.sort(function(a,b) {
  if ( parseInt(a.priority) > parseInt(b.priority) )
     return 1;
  else if ( parseInt(a.priority) < parseInt(b.priority) )
     return -1;
  else if (a.date > b.date )
     return 1;
  else if ( a.date < b.date )
     return -1;
  else if (a.title > b.title )
     return 1;
  else if ( a.title < b.title )
     return -1;
  else
     return 0;
});

您应该将日期字段更改为某种 Epox 或 smth(您可以自行修复)。

演示:http://jsbin.com/adosuh/1/edit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多