Angular 枚举值字符串中的枚举数组
我正在尝试将枚举值字符串转换为实际的枚举。我知道你可以比较一个字符串并对其进行处理(例如MyEnum.FirstEnum==='My_First_Enum'将返回true),但如果我可以返回枚举而不是字符串,那就太好了Angular 枚举值字符串中的枚举数组,angular,typescript,Angular,Typescript,我正在尝试将枚举值字符串转换为实际的枚举。我知道你可以比较一个字符串并对其进行处理(例如MyEnum.FirstEnum==='My_First_Enum'将返回true),但如果我可以返回枚举而不是字符串,那就太好了 export enum MyEnum { FirstEnum = 'My_First_Enum', SecondEnum = 'My_Second_Enum', ThirdEnum = 'My_Third_Enum' } getMyEnums(): MyEnum[]
export enum MyEnum {
FirstEnum = 'My_First_Enum',
SecondEnum = 'My_Second_Enum',
ThirdEnum = 'My_Third_Enum'
}
getMyEnums(): MyEnum[] {
// These would be an input argument, but for the sake of this example, I thought this was easier to understand
const stringEnumValues = ['My_Second_Enum', 'My_Third_Enum'];
// Convert to enums (result is [undefined, undefined])
return stringEnumValues.map(e => MyEnum[e]);
}
为什么不为此尝试一个冻结的JSON哈希呢
export const MyEnum = Object.freeze({
'FirstEnum': 'My_First_Enum',
'SeconfEnum': 'My_Second_Enum',
'ThirdEnum': 'My_Third_Enum',
'My_First_Enum': 'FirstEnum',
'My_Second_Enum': 'SeconfEnum',
'My_Third_Enum': 'ThirdEnum'
});
为什么不为此尝试一个冻结的JSON哈希呢
export const MyEnum = Object.freeze({
'FirstEnum': 'My_First_Enum',
'SeconfEnum': 'My_Second_Enum',
'ThirdEnum': 'My_Third_Enum',
'My_First_Enum': 'FirstEnum',
'My_Second_Enum': 'SeconfEnum',
'My_Third_Enum': 'ThirdEnum'
});
您需要将字符串强制转换为枚举类型的键,下面介绍如何使用表示枚举键的字符串数组和表示值的字符串数组: 按键获取:
getMyEnums(): MyEnum[] {
const stringEnumValues = ['SecondEnum', 'ThirdEnum'];
return stringEnumValues.map( (e : keyof typeof MyEnum) => MyEnum[e])
}
按值获取:
getMyEnums2(): MyEnum[] {
const stringEnumValues = ['My_First_Enum', 'My_Second_Enum'];
return stringEnumValues.map( (e : MyEnum) => e)
}
例如:
来源:您需要将字符串强制转换为枚举类型的键,下面介绍如何使用表示枚举键的字符串数组和表示值的字符串数组执行此操作: 按键获取:
getMyEnums(): MyEnum[] {
const stringEnumValues = ['SecondEnum', 'ThirdEnum'];
return stringEnumValues.map( (e : keyof typeof MyEnum) => MyEnum[e])
}
按值获取:
getMyEnums2(): MyEnum[] {
const stringEnumValues = ['My_First_Enum', 'My_Second_Enum'];
return stringEnumValues.map( (e : MyEnum) => e)
}
例如:
来源:尝试使用
对象。条目
方法,然后按所需值stringEnumValues
过滤,然后仅使用映射
过滤值:
const stringEnumValues = ['My_Second_Enum', 'My_Third_Enum'];
let result = Object.entries(MyEnum)
.filter(([k,v])=> stringEnumValues.includes(v))
.map(([ke, vl]) => MyEnum[ke]);
const stringEnumValues = ['My_Second_Enum', 'My_Third_Enum'];
let result = Object.entries(MyEnum)
.filter(([k,v])=> stringEnumValues.includes(v))
.map(([ke, vl]) => MyEnum[ke]);
.依我看,也许我错了,但那是过度工程你想要的输出是什么?@Stepp getMyEnums()应该返回并包含SecondEnum和ThirdEnums的数组依我看,也许我错了,但那是过度工程你想要的输出是什么?@Stepp getMyEnums()应该返回包含SecondEnum和ThirdEnumI的数组,我在提供的示例中遇到编译错误。使用文章中的示例,我得到[undefined,undefined],例如返回stringEnumValues.map(e=>MyEnum[e as keyof typeof MyEnum]);检查这一点,以及示例。这种方法比在mapI上使用
filter
和includes
更好。我在提供的示例中遇到了一个编译错误。使用文章中的示例,我得到[undefined,undefined],例如返回stringEnumValues.map(e=>MyEnum[e as keyof typeof MyEnum]);检查这一点,以及示例。这种方法比在Map上使用过滤器
和包含
更好。不过,我注意到,编译器认为“result”是any[]类型。从技术上讲,我可以将stringEnumValues强制转换为任意[]并返回该值。从技术上讲,我可以将StringEnumValue转换为任何[]并返回该值。