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