按多个条件对多维数组进行排序

3
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()没有问题,但是我不知道如何做到这一点。该怎么办?

可能是重复问题:https://dev59.com/rm865IYBdhLWcg3wTcpY - Control Freak
如果我只想按优先级排序,那就是重复了。但这不是我的问题... - Philipp Kühn
1
虽然原理相同,但你需要编写自己的比较函数,根据所有标准比较两个元素,直到它能够决定哪一个“更小”(或最终发现它们应被视为相等)。 - CBroe
1个回答

5

一种可能的解决方案

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 或其他类型(你可以自己修复)。演示:http://jsbin.com/adosuh/1/edit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接