TypeScript按日期排序不起作用

时间:2016-10-25 19:57:35

标签: sorting typescript

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

4 个答案:

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