TypeScript按日期排序不起作用

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)

  • 一元加号 (+) 将操作数 ( new Date() ) 转换为数字。https://www.javascripttutorial.net/javascript-unary-operators/ (3认同)

RnD*_*Drx 6

如果您遇到上述已接受答案的问题。我通过创建一个新的 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 日午夜以来存储的时间值(以毫秒为单位)。*/