我有一个对象TaskItemVO
,其字段为dueDate
,其类型为Date
:
export class TaskItemVO {
public dueDate: Date;
}
我有这个方法,当我尝试按日期排序时,我会调用它,但它不起作用:
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate - b.dueDate;
});
}
我在方法的返回行中收到此错误:
算术运算的右侧必须是“any”,“number”或枚举类型。
算术运算的左侧必须是“any”,“number”或枚举类型。
那么在TypeScript中按日期字段排序数组的正确方法是什么?
答案 0 :(得分:41)
尝试使用Date.getTime()方法:
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate.getTime() - b.dueDate.getTime();
});
}
^上面因未定义日期而引发错误,请尝试以下内容:
如果你想处理undefined:
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);
});
}
答案 1 :(得分:9)
作为可能的解决方法,您可以在此处使用一元+
运算符:
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return +new Date(a.dueDate) - +new Date(b.dueDate);
});
}
答案 2 :(得分:3)
我相信最好使用valueOf
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate.valueOf() - b.dueDate.valueOf();
});
}
根据文档:/ **返回自UTC 1970年1月1日午夜以来存储的时间值(以毫秒为单位)。 * /
答案 3 :(得分:2)
如果您遇到上述接受答案的问题。我通过创建一个新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);
});
}