Javascript 基于startTime&;的排序数组;结束时间

Javascript 基于startTime&;的排序数组;结束时间,javascript,arrays,node.js,sorting,Javascript,Arrays,Node.js,Sorting,我得到了一个包含fromTime和endTime的对象数组。我想对它们进行排序,以便在数组中首先得到16:00-18:00,最后得到16:00-21:00。我知道如何根据结束日期进行过滤,但是我需要考虑起始日期,有人能帮我找到正确的方向吗 "deliverySlots": [ { "deliveryFromTime": "17:00", "deliveryToTime": "19:00", }, { "deliveryFro

我得到了一个包含fromTime和endTime的对象数组。我想对它们进行排序,以便在数组中首先得到16:00-18:00,最后得到16:00-21:00。我知道如何根据结束日期进行过滤,但是我需要考虑起始日期,有人能帮我找到正确的方向吗

"deliverySlots": [
    {
        "deliveryFromTime": "17:00",
        "deliveryToTime": "19:00",
    },
    {
        "deliveryFromTime": "18:00",
        "deliveryToTime": "20:00",
    },
    {
        "deliveryFromTime": "19:00",
        "deliveryToTime": "21:00",
    },
    {
        "deliveryFromTime": "16:00",
        "deliveryToTime": "21:00",
    },
    {
        "deliveryFromTime": "16:00",
        "deliveryToTime": "18:00",
    }
]

function compare(a,b) {
    var time1 = parseFloat(a.deliveryToTime.replace(':','.').replace(/[^\d.-]/g, ''));
    var time2 = parseFloat(b.deliveryToTime.replace(':','.').replace(/[^\d.-]/g, ''));
    if (time1 < time2) return -1;
    if (time1 > time2) return 1;
    return 0;
}   
deliverySlots.sort(compare);

所以基本上我想在endDate和startDate优先排序。16:00-21:00应在19:00-21:00之后创建一个函数,以根据对象的属性值对对象进行排序,如下所示:

var deliverySlots=[
{
“deliveryFromTime”:“17:00”,
“deliveryToTime”:“19:00”,
},
{
“deliveryFromTime”:“18:00”,
“交货时间”:“20:00”,
},
{
“deliveryFromTime”:“19:00”,
“交货时间”:“21:00”,
},
{
“deliveryFromTime”:“16:00”,
“交货时间”:“21:00”,
},
{
“deliveryFromTime”:“16:00”,
“交货时间”:“18:00”,
}
];
功能比较(a、b){
if(a.deliveryToTimeb.deliveryFromTime))
返回-1;
如果(a.deliveryToTime>b.deliveryToTime | | |(a.deliveryToTime==b.deliveryToTime&&a.deliveryFromTimeconsole.log(deliverySlots)您可以获得事件的长度,然后按开始和结束时间排序

const getMin=s=>s.split(':').reduce((a,b)=>a*60++b);
var deliverySlots=[{deliveryFromTime:“17:00”,deliveryToTime:“19:00”},{deliveryFromTime:“18:00”,deliveryToTime:“20:00”},{deliveryFromTime:“19:00”,deliveryToTime:“21:00”},{deliveryFromTime:“16:00”,deliveryToTime:“18:00”};
deliverySlots.sort((a,b)=>{
var aa=[a.deliveryFromTime,a.deliveryToTime].map(getMin),
bb=[b.deliveryFromTime,b.deliveryToTime].map(getMin);
返回(aa[1]-aa[0])-(bb[1]-bb[0])
||aa[0]-bb[0]
||aa[1]-bb[1];
});

console.log(deliverySlots)为什么16-21是最后一个而不是最后一个,例如19-21?不清楚逻辑应该是什么,你能更精确一点吗?为什么
16:00-21:00
是最后一个?请添加一个排序结果。所以基本上我想在endDate和startDate优先排序。16:00-21:00应该在19:00-21:00之后,我已经更新了我的第一篇帖子,所以基本上我想在endDate和startDate优先排序。16:00-21:00应该在19:00-21:00之后。对不起,把你弄糊涂了,我弄糊涂了P
"deliverySlots": [
    {
        "deliveryFromTime": "16:00",
        "deliveryToTime": "18:00",
    },
    {
        "deliveryFromTime": "17:00",
        "deliveryToTime": "19:00",
    },
    {
        "deliveryFromTime": "18:00",
        "deliveryToTime": "20:00",
    },
    {
        "deliveryFromTime": "19:00",
        "deliveryToTime": "21:00",
    },
    {
        "deliveryFromTime": "16:00",
        "deliveryToTime": "21:00",
    },
]