按日期对对象数组进行排序无法正常工作,会忽略年份值

我有一个项目的对象数组,这些对象在其中类似于博客的条目。然后,我尝试按每个条目的发布日期(以最近的日期为准)对条目进行排序,但是,显然,排序功能没有考虑年份值或可能缺少的其他问题。

示例情况

其中一个条目于2019年6月23日(6)发布,它是输出数组的第一个值,因为它是日期最近的条目。但是,如果我尝试将其年份更改为类似2005的年份,它将保持在顶部,就像该函数忽略年份一样。我还尝试将其更改为0,但结果保持不变。

我使用的代码

对象数组中的示例项

对于我使用另一个数组的日期,其中索引 0 表示日期,索引 1 表示月份,并将 2 索引到年份

[{Id: "P3",Date: [23,6,2019]},...]

排序功能

我使用 Date 数组的三个值来计算自第0天起的总天数,并进行比较(最大天数=最近输入)

array.sort((a,b) => ((a.Date[0] + (a.Date[1] * 30) + (a.Date[2] * 365)) < (b.Date[0] + (b.Date[1] * 30) + (b.Date[2] * 365)) ? 1 : -1)).map(item => item.Id)

该函数按顺序输出具有所引用条目的 Id 的数组。

任何帮助修复我的代码的方法都会有所帮助,并且感激不尽:)

sunyirui 回答:按日期对对象数组进行排序无法正常工作,会忽略年份值

尝试一下。

function convertDateToNumber(date) {
  return Number(date[2] + date[1].toString().padStart(2,0) + date[0].toString().padStart(2,0));
}
var dates = [
  { Id: "P3",Date: [23,6,2019] },{ Id: "P4",Date: [3,{ Id: "P5",12,{ Id: "P6",7,{ Id: "P7",2019] }
];
dates.sort((a,b) => {
var aNumber = convertDateToNumber(a.Date);
var bNumber = convertDateToNumber(b.Date);
if (aNumber < bNumber) {
  return -1;
}
if (aNumber > bNumber) {
  return 1;
}
return 0;
});
console.log(dates);

,

使用JavaScript数据类型“日期”而不是数组格式。然后比较日期进行排序。

更改代码

svn diff

[{Id: "P3",2019]},...]

通过此更改,您可以按以下方式对对象进行排序

[{Id: "P3",date: '23/6/2019'/*use proper date format*/},...]
,

最好使用Date library比较日期数据,例如:moment.js

本文链接:https://www.f2er.com/3147966.html

大家都在问