Javascript 无法使用Date.parse()对数组进行排序

Javascript 无法使用Date.parse()对数组进行排序,javascript,Javascript,我想根据时间戳对数组进行排序 [ { who: 'User', msg: 'how are you?', time: '9:24:19' }, { who: 'Bot', msg: 'I am fine. Thank you. How are you?', time: '9:24:30' }, { who: 'User', msg: 'hi', time: '9:24:36' }, { w

我想根据时间戳对数组进行排序

[
  {
    who: 'User',
    msg: 'how are you?',
    time: '9:24:19'
  },
  {
    who: 'Bot',
    msg: 'I am fine. Thank you. How are you?',
    time: '9:24:30'
  },
  {
    who: 'User',
    msg: 'hi',
    time: '9:24:36'
  },
  {
    who: 'Bot',
    msg: 'hello i am Joe',
    time: '9:24:47'
  }
]
当我把它作为一个字符串排序时,它工作得很好,但是当我使用Date.parse(time)时,什么也没有发生。把它作为一个字符串排序的问题是,当我有23:11:8和23:11:36时,它认为23:11:36是一个小的。 怎么办

这是我的密码

var msg1 = msg.sort((a, b) => {
  console.log('sorting');


  var nameA = a.time; // ignore upper and lowercase
  var nameB = b.time; // ignore upper and lowercase
  console.log(nameA + " " + nameB + " " + Date.parse(nameA) + " " + Date.parse(nameB));
  if (nameA < nameB) {
    console.log('sorting');
    return -1;
  }
  if (nameA > nameB) {
    console.log('sorting');
    return 1;
  }

  // names must be equal
  return 0;
})
var msg1=msg.sort((a,b)=>{
console.log('sorting');
var nameA=a.time;//忽略大小写
var nameB=b.time;//忽略大小写
log(nameA+“”+nameB+“”+Date.parse(nameA)+“”+Date.parse(nameB));
if(nameA名称B){
console.log('sorting');
返回1;
}
//名字必须相等
返回0;
})

无法使用默认时间对数组进行排序10:01:44您需要一个适当的时间格式来解析日期,如2018年3月19日星期一10:01:44,以便它能够解析它

下面是一个示例函数,它使用Date.parse()对数组进行排序

函数sortuserorder(usersArray){
让sortedOrder=usersArray.sort(函数(a,b){
让firstDate=Date.parse(a.time);
设secondDate=Date.parse(b.time);
if(firstDatesecondDate)返回1;
返回0;
});
返回分类器;}
var sample=[{who:'User',msg:'how are you?',time:'Mon-Mar 19 2018 10:01:44'},
{谁:“机器人”,
味精:“我很好。谢谢。你好吗?”,
时间:“2018年3月19日星期一10:01:43”,
{谁:'User',msg:'hi',time:'Mon-Mar 19 2018 10:01:41'},
{谁:'Bot',msg:'你好,我是乔',时间:'Mon-Mar 19 2018 10:01:40']
log(sortuserorder(sample))
试试这个

msg.sort((a, b) => {
    var nameA = Date.parse('2018-01-01' + a.time);
    var nameB = Date.parse('2018-01-01' + b.time);
    if (nameA < nameB) { return -1; }
    if (nameA > nameB) { return 1; }
    return 0;
})
msg.sort((a,b)=>{
var nameA=日期解析('2018-01-01'+时间);
var nameB=日期解析('2018-01-01'+b.time);
if(nameAnameB){return 1;}
返回0;
})

Date.parse()需要您插入日期,而不仅仅是时间

事实上,您不需要
Date.parse
。你需要一些转变,使你的时代具有可比性。像这样的。这是一个简化的解决方案。你可能需要考虑AM PM。

让msgs=[{
谁:“用户”,
味精:“你好吗?”,
时间:9:06:19
},
{
谁:“机器人”,
味精:“我很好。谢谢。你好吗?”,
时间:“9:24:50”
},
{
谁:“用户”,
msg:'你好',
时间:“9:24:36”
},
{
谁:“机器人”,
味精:“你好,我是乔”,
时间:“9:24:47”
}
];
让排序=msgs.sort((a,b)=>{
设tA=a.time.split(“:”);
设tB=b.time.split(':');
返回(tA[0]*60*60+tA[1]*60+tA[2])>(tB[0]*60*60+tB[1]*60+tB[2])?1:-1;
});
控制台日志(已排序)第1部分-将字符串排序为日期:

只需在其上附加任何固定日期,如:

var时间='9:24:19';
var日期=新日期('2018-01-01'+时间);

console.log(date.tolocalString())
date.parse(“23:11:36”)
NaN
。那么如何将字符串解析为date呢?只需将任何固定日期附加到字符串上,如
var time='9:24:19';var日期=新日期('2018-01-01'+时间);console.log(date)
这也不是对数组进行排序。无法使用默认时间“10:01:44”对数组进行排序。您需要使用适当的时间格式来解析日期,如“2018年3月19日星期一10:01:44”,以便它能够对其进行解析。如上面的示例所示,但如果时间是9:24:5,实际上是9:24:05..当使用此代码而不是所有其他代码时…我得到的结果是9:24:5大于9:24:45无法重现问题,我添加了一些时间(上面的演示),并将其排序为:
“9:24:46”,“9:24:45”,“9:24:20”,“9:24:5”
,首先是46,最后是05或5。我认为您正在使用一些不同的数据进行测试,就像在我的测试代码中一样,没有时间值像
9:24:47
您发布的答案有以下示例[{who:'User',msg:'howe you',time:'9:06:19',{who:'Bot msg:'I罚款。谢谢。你好吗?',time:'9:24:50',who:'User',msg:'hi time:'9:24:36'},{谁:'Bot',msg:'你好,我是乔',时间:'9:24:47'}]是的,
9:24:50
是第一个显示的,因为第二个对象时间是
9:24:50
而不是
9:24:5
。此外,如果您想让代码按升序排序,那么它是按降序排序的,而不仅仅是在排序中反转减法。当我使用parseInt处理我遇到问题的情况下的所有值时,这对我很有效i、 e以这种格式返回时间时23:01:3。谢谢