我有一个项目的对象数组,这些对象在其中类似于博客的条目。然后,我尝试按每个条目的发布日期(以最近的日期为准)对条目进行排序,但是,显然,排序功能没有考虑年份值或可能缺少的其他问题。
其中一个条目于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 的数组。
任何帮助修复我的代码的方法都会有所帮助,并且感激不尽:)
答案 0 :(得分:1)
尝试一下。
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, 6, 2019] },
{ Id: "P5", Date: [23, 12, 2019] },
{ Id: "P6", Date: [23, 7, 2019] },
{ Id: "P7", Date: [3, 12, 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);
答案 1 :(得分:0)
使用JavaScript数据类型“日期”而不是数组格式。然后比较日期进行排序。
更改代码
svn diff
到
[{Id: "P3", Date: [23, 6, 2019]}, ...]
通过此更改,您可以按以下方式对对象进行排序
[{Id: "P3", date: '23/6/2019'/*use proper date format*/}, ...]
答案 2 :(得分:0)
最好使用Date library
比较日期数据,例如:moment.js。