【问题标题】:Javascript object array sort by date not working as expectedJavascript对象数组按日期排序未按预期工作
【发布时间】:2018-12-18 15:40:33
【问题描述】:

我有一个 javascript 对象数组,其中包含 5 个项目。每个都有一个字段,即日期字段。日期格式如下:Mon Dec 17 2018 19:28:29 GMT-0500 (Eastern Standard Time) {}

当我尝试这个时: myArray.sort(function(a, b) { return b.CreateTime - a.CreateTime ;})

数组未排序,即CreateTime字段值最早的对象既不在顶部也不在底部,而是在中间。

我也试过这个:

myArray.sort(function(a, b) { return (new Date(b.CreateTime.getTime())) - (new Date(a.CreateTime.getTime())) ;})

没用。

也试过这个:

myArray.sort(function(a, b) { return (new Date(b.CreateTime)) - (new Date(a.CreateTime)) ;})

还是不行。

网上搜索说这是按日期对 JS 对象数组进行排序的方法。

那么,我错过了什么?

这是一个示例对象:

{
 "Identifier": "prd17865EXC",
 "Type": "large",
 "Status": "available",
 "UN": "u367892",
 "DBN": "sprtdb",
 "EP": {
         "Prod": "excersizeMachine1",
         "Number": 57477367
       },
 "CreateTime": "2018-12-18T00:28:29.803Z"
}

【问题讨论】:

  • 什么是CreateTime,它返回的究竟是什么
  • @Kenobi 问题是,这些字符串/数字究竟是什么样的?喜欢,在此处发布内容。
  • 如果它们是日期实例,那么 typeof a.CreateTime 将是 "object"。像这样的字符串不能被可靠地解析为日期,尤其是末尾有那个流浪的{}
  • 如果它们是 真的 日期实例,那么 b.CreateTime - a.CreateTime 肯定会起作用。
  • 除非你给我们一个最小的例子,否则我们将无法提供帮助。您必须以可以重现问题的方式提供 myArray 的内容。

标签: javascript arrays sorting date


【解决方案1】:

我相信你在第二种方法中有一个错字。 您想在新创建的日期而不是您的初始日期致电getTime()

应该是:

myArray.sort(function(a, b) {
  return new Date(b.CreateTime).getTime() - new Date(a.CreateTime).getTime();
});

【讨论】:

  • 您实际上并不需要对.getTime() 的调用,因为日期实例将转换为用于- 操作的数字,但这不会造成任何影响。
  • @Pointy:好点,它只是更明确,而不是依赖于 JS 的神奇铸造系统;)
  • 试过了,还是不行。
  • 我已经对其中一个对象进行了字符串化并发布在上面。
  • 我刚刚使用了你的新代码 sn-p 并且我发布的代码按降序对对象进行了排序
【解决方案2】:

let myArray = [{
  CreateTime :"2018-12-18T00:28:29.803Z"
  },
  {
  CreateTime :"2018-12-16T00:28:29.803Z"
  }
];

myArray.sort( (a,b) => {
  dateA = new Date(a.CreateTime);
  dateB = new Date(b.CreateTime);
  
  return dateA - dateB;
});

console.log(myArray);

【讨论】:

  • 我已经对其中一个对象进行了字符串化并发布在上面。
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多