我有一个带有字段dueDate的对象TaskItemVO,其类型为Date:

export class TaskItemVO {
    
    public dueDate: Date;
}

当我try 按日期排序时,我会调用这个方法,但它不起作用:

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

    });
}

我在方法的返回行中得到了这个错误:

算术运算的右侧必须是"any"、"number"或枚举类型.

算术运算的左侧必须是"any"、"number"或枚举类型.

So what is the correct way of sorting array by date fields in TypeScript?

推荐答案

try 使用Date.getTime()方法:

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

    });
}

^上面抛出日期未定义的错误,请try 下面的操作:


编辑

如果要处理未定义的:

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

Typescript相关问答推荐

如何使用Generics保留构造函数的类型信息?

类型脚本如何将嵌套的通用类型展开为父通用类型

带有微前端的动态React路由问题

属性的类型,该属性是类的键,其值是所需类型

为什么从数组中删除一个值会删除打字错误?

数组文字中对象的从键开始枚举

我想创建一个只需要一个未定义属性的打字脚本类型

使用数组作为类型中允许的键的列表

在打字脚本中对可迭代对象进行可变压缩

将接口映射到交叉口类型

编剧- Select 下拉框

如何从JWT Reaction中提取特定值

如何将对象的字符串文字属性用作同一对象中的键类型

为什么类方法参数可以比接口参数窄

Angular 16:无法覆盖;baseUrl;在tsconfig.app.json中

如何从联合类型推断函数参数?

如何让Record中的每个值都有独立的类型?

为什么 Typescript 无法正确推断数组元素的类型?

如何确定剧作家中给定定位器的值?

如何为字符串模板文字创建类型保护