ES5 sort() 和日期

问题描述 投票:0回答:1

我的数组中有许多对象。这些对象有一个“时间”属性,它是一个日期字符串。

items = [
  {time: "2013-03-01T10:46:11Z"},
  {time: "2013-03-03T10:46:11Z"},
  {time: "2013-03-02T10:46:11Z"}
]

我希望按“时间”属性对数组进行排序。

我已经阅读了如何按日期属性对对象数组进行排序?Javascript日期排序,但我似乎无法使这些解决方案中的任何一个(转换为日期对象或作为字符串排序)工作。

我的排序功能:

items.sort(function(first, second){
  return new Date(first.time) < new Date(second.time) ? 1 : -1;
})

测试结果:

items.forEach(function(item){
  console.log(item.time)
})

退货:

2013-03-01T10:46:11Z
2013-03-03T10:46:11Z
2013-03-02T10:46:11Z

3月1日、3月3日、3月2日。我做错了什么?

javascript node.js date ecmascript-5
1个回答
2
投票

您在比较器函数中调用字段“日期”而不是“时间”。另外,该函数应该返回一个整数,而不是布尔值:

  return new Date(first.time) - new Date(second.time);

这可能不适用于所有浏览器。如果您的所有时间都是世界时间,只需将它们作为字符串进行比较:

  return first.time > second.time ? 1 : first.time === second.time ? 0 : -1;
© www.soinside.com 2019 - 2024. All rights reserved.