我想要一个简单的方法从枚举器中获取一个键列表,我尝试了Object.keys,但它返回了6个键,0-5,我认为它会出现因为当我尝试foreach这个枚举时,这个返回键和值列表,是否有一种简单的方法只返回键,我不想返回mount并返回另一个列表。
我将使用此反应
我的枚举:
enum ObservationType {
Accomodation = 1,
Addtional = 2,
LandTransport = 3
}
我试过的示例并返回了六个值:
{Object.keys(ObservationType).map((type) => <div>{type}</div>)}
答案 0 :(得分:1)
来自TypeScript enum documentation:
在这个生成的代码中,枚举被编译成一个对象,该对象存储forward(name - &gt; value)和reverse(value - &gt; name)映射。对其他枚举成员的引用始终作为属性访问发出,并且从不内联。
请记住,字符串枚举成员根本不会生成反向映射。
这意味着如果你能够,你可能想要使用字符串枚举,例如:
enum ObservationType {
Accomodation = 'Acc',
Addtional = 'Addt',
LandTransport = 'LandT',
}
// Object.keys will only have the three keys.
处理此问题的另一种方法是跟踪映射值以仅获取反向映射一次。这需要首先设置对象的数字键,这不一定是保证:
enum ObservationTypeNums {
Accomodation,
Addtional,
LandTransport,
}
Object.keys(ObservationTypeNums).reduce((arr, key) => {
if (!arr.includes(key)) {
arr.push(ObservationTypeNums[key]);
}
return arr;
}, []);
// arr now has only the string keys
否则你只需要像你一样过滤掉数字键。
答案 1 :(得分:0)
ObservationType
对象将包含密钥:Accomodation
,Additional
,LandTransport
,1
,2
,3
和是how enums work in TypeScript的基础。
如果您只想要string
个名称,那就可以使用简单的filter
:
{Object.keys(ObservationType).filter(k => typeof key === 'string').map((type) => <div>{type}</div>)}
答案 2 :(得分:0)
Object.keys(ObservationType).filter(k => isNaN(Number(k)))
向@basarat授予我的答案。
答案 3 :(得分:0)
我很难找到一个好的答案。
看起来enum
生成了一个Object
,如下所示:
{
key0: 0,
key1: 1,
0: key0,
1: key1
}
这就是我所做的:
const observationTypes: string[] = Object.keys(ObservationType).filter((_, i) => ObservationType[i] !== undefined).map((_, i) => ObservationType[i]);
这给了我一个字符串数组:
{
0: "a",
1: "b",
2: "c",
3: "d",
4: "e",
...
}
您可以轻松地对此进行修改,以创建类似于您的问题的元素。
答案 4 :(得分:0)
对于字符串枚举(带有字符串值),您可以只使用 while new_value != previous_value:
#wait
#do something
#put contents of new_value into previous_value
#update new_value from external source (e.g. URL from browser, which may or not be have changed)
else:
#wait
#do nothing
#put contents of new_value into previous_value
#update new_value from external source
continue
/ Object.keys(myEnum)
对于数字枚举,以下方法可以在没有 Object.values(myEnum)
的情况下工作,这对于某些键可能会出错:
isNan
答案 5 :(得分:0)
以下可以映射枚举的键,您可以使用 ObservationType[key] 获取每个键的值。
(Object.keys(ObservationType) as Array<keyof typeof ObservationType>).map(key, index) => {}
答案 6 :(得分:0)
尝试使用
Object.keys(enumObj).filter(key => isNaN(Number(key)))
它涵盖了所有类型的枚举,包括异构枚举。