排序日期对象数组错误javascript

sorting array of date objects error javascript

本文关键字:错误 javascript 数组 对象 日期 排序      更新时间:2023-09-26

我遇到了一个奇怪的错误,无法解决。我有一个日期对象数组(AngularJS),我想对它们进行排序。我正在做以下

console.log(tempDates);
tempDates.sort( function(a, b) {
    return a-b;
});
console.log(tempDates);

问题是tempDates数组正在被修改,即日期值正在被修改。自定义排序功能错误吗?/我错过了什么?

原始tempDates-

["Jun 19", "Jun 26", "Jul  3", "Jul 10", "Jul 17", "Jul 24", "Jul 31", "Aug  7", "Aug 14", "Aug 21", "Aug 28", "Sep  4", "Sep 11"]

分拣后是

["Jun 19", "Jun 26", "Jul  1", "Jul  3", "Jul 10", "Jul 17", "Jul 24", "Aug  7", "Aug 14", "Aug 21", "Aug 28", "Sep  4", "Sep 11"]

(请注意,数组由DATE对象组成,我放置的控制台输出只是为了可读性)

日期在变化,比如"7月1日"突然出现,"7月31日"从名单中删除。发生这种情况的原因是什么?

您排序的是日期对象,而不是数字。要将它们排序为数字,您必须执行以下操作:

console.log(tempDates);
tempDates.sort( function(a, b) {
    return a.getTime() - b.getTime(); 
});
console.log(tempDates);

.getTime()将把日期的字符串表示形式转换为实际数字。(自1970/01/01以来的毫秒)