按iso字符串降序排序不起作用

时间:2018-09-22 07:03:02

标签: javascript isodate

期望的行为

按对象的iso_string属性对对象数组进行降序排列。

实际行为

阵列顺序不变。

我尝试过的事情

我肯定在某个地方犯了一个简单的错误,因为有多个帖子确认使用的是正确的sort()语法。

iso_string值是通过new Date().toISOString()生成的;

var dates = [{
  "formatted_date": "22/09/2018 @ 04:02pm",
  "iso_string": "2018-09-22T06:02:22.485Z"
}, {
  "formatted_date": "22/09/2018 @ 04:12pm",
  "iso_string": "2018-09-22T06:12:04.471Z"
}, {
  "formatted_date": "22/09/2018 @ 04:05pm",
  "iso_string": "2018-09-22T06:05:45.818Z"
}, {
  "formatted_date": "22/09/2018 @ 04:00pm",
  "iso_string": "2018-09-22T06:00:46.954Z"
}, {
  "formatted_date": "22/09/2018 @ 03:56pm",
  "iso_string": "2018-09-22T05:56:13.968Z"
}];

var sorted_dates = dates.sort(function(a, b) {
  return b.iso_string - a.iso_string;
});

console.log(sorted_dates);

编辑:我将值包装在new Date()中,并且排序正确。

2 个答案:

答案 0 :(得分:5)

由于您有ISO 8601个可以按字典顺序排序的日期,因此可以使用string.localCompare()对其进行排序。

Model
Creator

答案 1 :(得分:2)

iso_string是字符串类型,您需要将其转换为日期然后进行排序。这是一个改进的示例

var dates = [{
  "formatted_date": "22/09/2018 @ 04:02pm",
  "iso_string": "2018-09-22T06:02:22.485Z"
}, {
  "formatted_date": "22/09/2018 @ 04:12pm",
  "iso_string": "2018-09-22T06:12:04.471Z"
}, {
  "formatted_date": "22/09/2018 @ 04:05pm",
  "iso_string": "2018-09-22T06:05:45.818Z"
}, {
  "formatted_date": "22/09/2018 @ 04:00pm",
  "iso_string": "2018-09-22T06:00:46.954Z"
}, {
  "formatted_date": "22/09/2018 @ 03:56pm",
  "iso_string": "2018-09-22T05:56:13.968Z"
}];
var sorted_dates = dates.sort(function(a, b) {
  return new Date(b.iso_string) - new Date(a.iso_string);
});
console.log(sorted_dates);

您也可以使用localCompare()而不将字符串转换为日期。

var dates = [{
  "formatted_date": "22/09/2018 @ 04:02pm",
  "iso_string": "2018-09-22T06:02:22.485Z"
}, {
  "formatted_date": "22/09/2018 @ 04:12pm",
  "iso_string": "2018-09-22T06:12:04.471Z"
}, {
  "formatted_date": "22/09/2018 @ 04:05pm",
  "iso_string": "2018-09-22T06:05:45.818Z"
}, {
  "formatted_date": "22/09/2018 @ 04:00pm",
  "iso_string": "2018-09-22T06:00:46.954Z"
}, {
  "formatted_date": "22/09/2018 @ 03:56pm",
  "iso_string": "2018-09-22T05:56:13.968Z"
}];

var sorted_dates = dates.sort((a, b)=>b.iso_string.localeCompare(a.iso_string));
console.log(sorted_dates);