数组按时间排序hh:mm:ss

时间:2019-08-21 10:25:55

标签: javascript arrays sorting

我正在尝试整理时间。但我无法按时间(hh:mm:ss)格式排序。所以我用过矩js。我的数组按时间排序未得到排序。如何使用地图对数组进行排序

我有一个对象数组:

let elements =[
  {
    "id": 1,
    "date": "02:01:02"
  },
  {
    "id": 2,
    "date": "01:01:01"
  },
  {
    "id": 3,
    "date": "03:01:01"
  },
  {
    "id": 4,
    "date": "04:01:01"
  }
 ]; 


 let parsedDates = new Map(
        elements.map(e =>[["id", "date"],[e.id, moment(e.date, 'hh:mm:ss')]])
        );

    elements.sort((a, b) => parsedDates.get(a) - parsedDates.get(b));

    console.log(elements.map(e => ({ id: e.id, date: e.date })));

3 个答案:

答案 0 :(得分:3)

您可以使用string.localeCompare()对时间进行字典排序。

let times = [ { "id": 1, "date": "02:01:02" }, { "id": 2, "date": "01:01:01" }, { "id": 3, "date": "03:01:01" }, { "id": 4, "date": "04:01:01" } ];
times.sort((a,b) => a.date.localeCompare(b.date));
console.log(times);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

您创建的parsedDates地图如下所示:

Map {
  [ 'id', 'date' ] => [ 1, <some Date object> ],
  [ 'id', 'date' ] => [ 2, <some Date object> ],
  [ 'id', 'date' ] => [ 3, <some Date object> ],
  [ 'id', 'date' ] => [ 4, <some Date object> ]
}

然后尝试使用以下元素从中提取:

parsedDates.get({ "id": 1, "date": "02:01:02" })

这不应该起作用,因为Map中的键是and Array实例。

即使您使用数组作为键:

parsedDates.get([ 1, "02:01:02" ])

这仍然不起作用,因为这将是一个不同的对象引用。我的意思是两个数组

a = [ 1, "02:01:02" ]
b = [ 1, "02:01:02" ]

即使它们的值相同,也存储在不同的位置并且是不同的对象。

因此,您可以对解决方案进行一些修改:

let elements =[
  {
    "id": 1,
    "date": "02:01:02"
  },
  {
    "id": 2,
    "date": "01:01:01"
  },
  {
    "id": 3,
    "date": "03:01:01"
  },
  {
    "id": 4,
    "date": "04:01:01"
  }
 ]; 

let parsedDates = new Map(
      elements.map(e => [e.date, e])
      );

elements = elements.map(x => x.date).sort().map(x => parsedDates.get(x))

console.log(elements)

// [
//   { id: 2, date: '01:01:01' },
//   { id: 1, date: '02:01:02' },
//   { id: 3, date: '03:01:01' },
//   { id: 4, date: '04:01:01' }
// ]

答案 2 :(得分:0)

您可以尝试

StatusCode