TypeScript枚举转换为对象数组

247

我有一个这样定义的枚举:

export enum GoalProgressMeasurements {
    Percentage = 1,
    Numeric_Target = 2,
    Completed_Tasks = 3,
    Average_Milestone_Progress = 4,
    Not_Measured = 5
}

但我希望它以以下方式从我们的API表示为对象数组/列表:

[{id: 1, name: 'Percentage'}, 
 {id: 2, name: 'Numeric Target'},
 {id: 3, name: 'Completed Tasks'},
 {id: 4, name: 'Average Milestone Progress'},
 {id: 5, name: 'Not Measured'}]

有没有一种简单且本地化的方法来实现这个问题,或者我必须构建一个函数,将枚举类型转换为int和字符串,并将对象构建成数组?

有没有一种简单且本地化的方法来实现这个问题,或者我必须构建一个函数,将枚举类型转换为int和字符串,并将对象构建成数组?


枚举是在运行时存在的真实对象。因此,您可以通过执行以下操作来反转映射:GoalProgressMeasurements[GoalProgressMeasurements.Completed_Tasks] 以获取枚举名称。我不知道这是否有帮助。 - Diullei
你能更好地描述一下“来自我们的API”吗?可以举个使用的例子吗? - gilamran
31个回答

0
我喜欢@Hakeem P A's answer的方法,但是可以简化得更多。
export enum MediaTypes {
    IMAGE = 1,
    AUDIO = 2,
    VIDEO = 3
}

将其转换为对象数组,以便在Angular中绑定到选择元素的选项。
types = Object.entries(MediaTypes).filter(([key, val]) => typeof val === 'number').map(([key, val]) => ({ id: val, code: key }));

然后一些表单标记将如下所示:
<select name="media-type" [(ngModel)]="media.typeID" required>
    <option [ngValue]="null">&ndash;SELECT MEDIA TYPE&ndash;</option>
    <option [ngValue]="type.id" *ngFor="let type of types">{{type.code}}</option>
</select>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接