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

Javascript 数组按时间排序hh:mm:ss,javascript,arrays,sorting,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,

我正在努力安排时间。但我无法按时间(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 })));

您可以使用字典对时间进行排序

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(次)

.as控制台包装{max height:100%!important;top: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([ 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' }
// ]
你可以试试这个

函数convertDateObj(hhmmss){
让obj=new Date();//使用客户端当前时间创建日期对象
让[hours,minutes,seconds]=hhmmss.split(“:”);
obj.setHours(+hours);//使用隐式类型强制设置小时数
setMinutes(minutes);//您可以传递数字或字符串,这并不重要
对象设置秒(秒);
返回obj;
}
让元素=[
{
“id”:1,
“日期”:“02:01:02”
},
{
“id”:2,
“日期”:“01:01:01”
},
{
“id”:3,
“日期”:“03:01:01”
},
{
“id”:4,
“日期”:“04:01:01”
}
]; 
elements.sort((a,b)=>convertDateObj(a.date)-convertDateObj(b.date));//升序

elements.sort((a,b)=>convertDateObj(b.date)-convertDateObj(a.date));//降序
矩的作用是什么?代码的问题是
parsedDates.get(b)
parsedDates.get(a)
return
未定义
。由于无法对映射进行排序,请首先对
元素
数组进行排序,然后从中创建一个映射。传递给新
映射
的数组没有多大意义。你到底想在那里完成什么?
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' }
// ]