JSFiddle - React, Tailwind, and code Playground
HTML
<pre id="out"></pre>
JavaScript
//sort this
var data = [
{ id: 1, start: null, end: new Date('1997/01/01'), rank: 90 },
{ id: 2, start: null, end: new Date('1997/01/01'), rank: 91 },
{ id: 3, start: null, end: new Date('1997/01/01'), rank: 92 },
{ id: 4, start: new Date('1997/01/01'), end: new Date('1997/09/01'), rank: 93 },
{ id: 5, start: new Date('1998/01/01'), end: new Date('1997/09/01'), rank: 95 },
{ id: 6, start: new Date('1998/01/01'), end: new Date('1997/09/01'), rank: 94 },
{ id: 7, start: new Date('1991/01/01'), end: new Date('1997/06/01'), rank: 96 },
{ id: 8, start: new Date('1992/01/01'), end: new Date('1997/05/01'), rank: 97 },
{ id: 9, start: new Date('1993/01/01'), end: new Date('1997/04/01'), rank: 98 },
{ id: 10, start: new Date('1994/01/01'), end: new Date('1997/03/01'), rank: 99 },
{ id: 11, start: new Date('1995/01/01'), end: new Date('1997/02/01'), rank: 90 },
];
var generic_date = new Date(2070, 1, 1);
checkDate = function(date) {
return Date.parse(date) ? new Date(date): generic_date;
}
function sortData() {
data.sort(function(a,b){
var deltaEnd = checkDate(b.end) - checkDate(a.end);
if(deltaEnd) return deltaEnd;
var deltaRank = a.rank - b.rank;
if (deltaRank) return deltaRank;
var deltaStart = checkDate(b.start) - checkDate(a.start);
if(deltaStart) return deltaStart;
return 0;
});
}
sortData();
document.getElementById('out').innerHTML = JSON.stringify(data, null, 2);