代码之家  ›  专栏  ›  技术社区  ›  muffin

Javascript-按日期然后按时间排序对象数组

  •  2
  • muffin  · 技术社区  · 6 年前

    我有以下数组:

    [{id: 1, value : "value1", date: "2018-08-08", time: "15:27:17"},
    {id: 2, value : "value2", date: "2018-08-09", time: "12:27:17"},
    {id: 3, value : "value3", date: "2018-08-10", time: "17:27:17"},
    {id: 4, value : "value4", date: "2018-08-11", time: "10:27:17"}]
    

    如何将数组从最早排序到最新排序,或者从最早排序到最新排序?

    我尝试过按日期排序,但按时间排序会将记录id 4的顺序转换为id 3,因为它的时间值早于记录3,但技术上是按定义,晚于记录3。

    给定这个数组和json结构,如何对数组进行排序以同时获取这两个字段( date time )考虑到了吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   CertainPerformance    6 年前

    date s、 如果没有区别,按 time s、 一个人 .sort 功能:

    const arr = [{id: 1, value : "value1", date: "2018-08-08", time: "15:27:17"},
    {id: 2, value : "value2", date: "2018-08-09", time: "12:27:17"},
    {id: 3, value : "value3", date: "2018-08-10", time: "17:27:17"},
    {id: 4, value : "value4", date: "2018-08-10", time: "01:27:17"},
    {id: 5, value : "value5", date: "2018-08-10", time: "09:27:17"},
    {id: 6, value : "value6", date: "2018-08-10", time: "23:27:17"},
    {id: 7, value : "value7", date: "2018-08-10", time: "16:27:17"},
    {id: 8, value : "value8", date: "2018-08-11", time: "10:27:17"}
    ];
    
    arr.sort((a, b) => a.date.localeCompare(b.date) || a.time.localeCompare(b.time));
    console.log(arr);

    日期的差异将被返回,除非它们是相同的,在这种情况下 localCompare 会出来的 0 ,将返回时间差。

    要改为降序排序,只需切换 a s和 b 学生:

    const arr = [{id: 1, value : "value1", date: "2018-08-08", time: "15:27:17"},
    {id: 2, value : "value2", date: "2018-08-09", time: "12:27:17"},
    {id: 3, value : "value3", date: "2018-08-10", time: "17:27:17"},
    {id: 4, value : "value4", date: "2018-08-10", time: "01:27:17"},
    {id: 5, value : "value5", date: "2018-08-10", time: "09:27:17"},
    {id: 6, value : "value6", date: "2018-08-10", time: "23:27:17"},
    {id: 7, value : "value7", date: "2018-08-10", time: "16:27:17"},
    {id: 8, value : "value8", date: "2018-08-11", time: "10:27:17"}
    ];
    
    arr.sort((a, b) => b.date.localeCompare(a.date) || b.time.localeCompare(a.time));
    console.log(arr);