【问题标题】:Please How do I sort range of time in ascending order?请问如何按升序对时间范围进行排序?
【发布时间】:2019-01-05 06:48:12
【问题描述】:

我有一个包含“时间”和“投票”的对象数组 我希望按升序对时间进行排序。请问我该怎么办?

[ { time: '10:00 - 11:00', vote: 0 },
  { time: '7:00 - 8:00', vote: 2 },
  { time: '12:00 - 1:00', vote: 0 },
  { time: '11:00 - 12:00', vote: 2 },
  { time: '4:00 - 5:00', vote: 0 },
  { time: '2:00 - 3:00', vote: 0 },
  { time: '5:00 - 6:00', vote: 0 },
  { time: '9:00 - 10:00', vote: 2 },
  { time: '8:00 - 9:00', vote: 1 },
  { time: '1:00 - 2:00', vote: 1 },
  { time: '3:00 - 4:00', vote: 0 } ]

【问题讨论】:

    标签: javascript arrays time


    【解决方案1】:

    您可以使用string#localeCompare 对您的时间进行排序。

    let data = [ { time: '10:00 - 11:00', vote: 0 }, { time: '7:00 - 8:00', vote: 2 }, { time: '12:00 - 1:00', vote: 0 }, { time: '11:00 - 12:00', vote: 2 }, { time: '4:00 - 5:00', vote: 0 }, { time: '2:00 - 3:00', vote: 0 }, { time: '5:00 - 6:00', vote: 0 }, { time:'9:00 - 10:00', vote: 2 }, { time: '8:00 - 9:00', vote: 1 }, { time: '1:00 - 2:00', vote: 1 }, { time: '3:00 - 4:00', vote: 0 } ];
    data.sort((a,b) => a.time.localeCompare(b.time, undefined, {numeric:true}));
    console.log(data);

    let data = [ { time: '10:00 - 11:00', vote: 0 }, { time: '7:00 - 8:00', vote: 2 }, { time: '12:00 - 1:00', vote: 0 }, { time: '11:00 - 12:00', vote: 2 }, { time: '4:00 - 5:00', vote: 0 }, { time: '2:00 - 3:00', vote: 0 }, { time: '5:00 - 6:00', vote: 0 }, { time:'9:00 - 10:00', vote: 2 }, { time: '8:00 - 9:00', vote: 1 }, { time: '1:00 - 2:00', vote: 1 }, { time: '3:00 - 4:00', vote: 0 } ],
        result = data.map(({time},i) => [new Date('1970/01/01 ' + time.split(" - ")[0]), i])
                     .sort((a,b) => a[0] - b[0])
                     .map(([,index]) => data[index]);
    console.log(result);

    【讨论】:

    • 谢谢。我有类似的东西。这意味着我可能只需将时间格式更改为“12:00 - 13:00”等等。得到我需要的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    相关资源
    最近更新 更多