【问题标题】:Sort String of Date & Time within array of object在对象数组中对日期和时间的字符串进行排序
【发布时间】:2021-01-06 07:54:22
【问题描述】:

给定:

[{
    date: "2020-12-23",
    session: "14:00:00-15:00:00"
}, {
    date: "2020-12-23",
    session: "10:00:00-12:00:00"
},{
    date: "2020-12-23",
    session: "12:00:00-14:00:00"
},{
    date: "2020-12-22",
    session: "14:00:00-15:00:00"
}]

如何按日期和会话排序? 因为它们都是字符串,尤其是会话是时间范围

【问题讨论】:

    标签: javascript arrays sorting date time


    【解决方案1】:

    Sort 需要一个函数来比较数组的两个元素并返回一个数字:正数、负数或零。

    现在,由于我们必须处理日期和时间,我们从每个组件中选择date,并通过拆分和获取session 字符串的前半部分来选择会话时间戳的开始。我们将日期和时间连接起来,以便将parse 简化为毫秒。现在可以在我们的比较器中使用毫秒来比较会话开始时间。

    const v = [{
        date: "2020-12-23",
        session: "14:00:00-15:00:00"
    }, {
        date: "2020-12-23",
        session: "10:00:00-12:00:00"
    },{
        date: "2020-12-23",
        session: "12:00:00-14:00:00"
    },{
        date: "2020-12-22",
        session: "14:00:00-15:00:00"
    }];
    
    const parser = ({date, session}) => Date.parse(`${date}T${session.split('-')[0]}`)
    
    v.sort((a, b) => parser(a) - parser(b))
    
    console.log(v)

    返回

    [
      {
        "date": "2020-12-22",
        "session": "14:00:00-15:00:00"
      },
      {
        "date": "2020-12-23",
        "session": "10:00:00-12:00:00"
      },
      {
        "date": "2020-12-23",
        "session": "12:00:00-14:00:00"
      },
      {
        "date": "2020-12-23",
        "session": "14:00:00-15:00:00"
      }
    ]
    

    【讨论】:

      【解决方案2】:

      这可以使用自定义比较函数来完成。连接字符串并使用内置的字符串比较方法。

      exams.sort( 
          (a,b) => (a.date+a.session).localeCompare(b.date+b.session)
      )
      

      【讨论】:

        猜你喜欢
        • 2015-08-21
        • 2019-04-28
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2010-11-11
        • 1970-01-01
        • 2021-07-13
        • 2019-10-29
        相关资源
        最近更新 更多