TypeScript按日期排序不起作用

o2rvlv0m  于 2023-01-18  发布在  TypeScript
关注(0)|答案(4)|浏览(148)

我有一个对象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中按日期字段对数组排序的正确方法是什么?

2o7dmzc5

2o7dmzc51#

尝试使用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);
    });
}
ffscu2ro

ffscu2ro2#

作为可能的解决方法,您可以在此处使用一元+运算符:

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

一元加号(+)将操作数(new Date())转换为数字。

91zkwejq

91zkwejq3#

我认为最好使用valueOf

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

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

2ledvvac

2ledvvac4#

如果你遇到了上面接受的答案的问题。我让它通过创建一个新的日期和传入日期参数来工作。

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);
    });
  }

相关问题