按日期排序不起作用

我有一个对象 TaskItemVO和字段 dueDate,它的类型是 Date:

export class TaskItemVO {
    

public dueDate: Date;
}

我有这样一个方法,当我试图按日期排序时,我会调用它,但它不起作用:

public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate - b.dueDate;


});
}

我在 method 的返回行中得到了这个错误:

算术运算的右边必须是“ any”、“ number”或枚举类型。

算术运算的左边必须是“ any”、“ number”或枚举类型。

那么 TypeScript 中按日期字段排序数组的正确方法是什么呢?

99428 次浏览

尝试使用 Date. getTime ()方法:

public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate.getTime() - b.dueDate.getTime();


});
}

^ 上面引发未定义日期的错误,因此请尝试下面的操作:


剪辑

如果要处理未定义的:

private getTime(date?: Date) {
return date != null ? date.getTime() : 0;
}




public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return this.getTime(a.dueDate) - this.getTime(b.dueDate);
});
}

作为可能的解决办法,你可以在这里使用一元 +操作符:

public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return +new Date(a.dueDate) - +new Date(b.dueDate);
});
}

如果你遇到问题与接受的答案以上。我通过创建一个新 Date 并传入 Date 参数使其工作。

  private getTime(date?: Date) {
return date != null ? new Date(date).getTime() : 0;
}


public sortByStartDate(array: myobj[]): myobj[] {
return array.sort((a: myobj, b: myobj) => {
return this.getTime(a.startDate) - this.getTime(b.startDate);
});
}

我认为最好使用 valueOf

public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate.valueOf() - b.dueDate.valueOf();
});
}

根据 docs:/* * 返回自1970年1月1日午夜以来以毫秒为单位的存储时间值。 */