如何在Javascript中获取全局对象的名称和道具
我知道变量名不是对象的固有属性,因此在通过函数传递时无法检索。但这是我的用例,我想在如何在Javascript中获取全局对象的名称和道具,javascript,Javascript,我知道变量名不是对象的固有属性,因此在通过函数传递时无法检索。但这是我的用例,我想在UniversityEnums和displayStrings的成员之间创建一个映射,以获得显示字符串 const UniversityEnums = { studentStatus: {Enrolled: 'Enrolled', OnHold: 'OnHold', Expelled: 'Expelled'}, professorStatus: {FullTime: 'FullTime', PartTime: 'P
UniversityEnums
和displayStrings
的成员之间创建一个映射,以获得显示字符串
const UniversityEnums = {
studentStatus: {Enrolled: 'Enrolled', OnHold: 'OnHold', Expelled: 'Expelled'},
professorStatus: {FullTime: 'FullTime', PartTime: 'PartTime', Emeritus: 'Emeritus', Expelled: 'Expelled'}
};
及
我的目标是编写一个函数,用于获取UniversityEnums的成员并返回相应的显示字符串,例如:
const expelledStudentDispStr = getDispString(UniversityEnums.studentStatus.Expelled);
console.log(expelledStudentDispStr);
// Student was expelled
我当前拥有的代码有两个输入参数,类似于const expelledStudentDispStr=getDispString('studentStatus',UniversityEnums.studentStatus.executed)
它需要枚举的名称来获取值,但我正在寻找一种更聪明的方法
提前谢谢
注意:我可以操作枚举对象(例如,使用不同的变量名定义它(或者,可能,可能,向它或它的子对象附加其他属性)。但是,我无法更改它们的值,因为这些值用于将这些状态与其他变量进行比较。此外,displayStrings
来自第三方来源,为我修改它们是不可行的(至少很容易!)
可能的解决方法:
我想到的一种方法是修改枚举对象,使其名称与displayStrings
键匹配:
const UniversityEnums = {
studentStatus: {
studentStatus_Enrolled: 'Enrolled',
studentStatus_OnHold: 'OnHold',
studentStatus_Expelled: 'Expelled'},
professorStatus: {
professorStatus_FullTime: 'FullTime',
professorStatus_PartTime: 'PartTime',
professorStatus_Emeritus: 'Emeritus',
professorStatus_Expelled: 'Expelled'}
};
注意,我可以操作枚举对象
在这种情况下,很容易:只需在枚举中放入唯一的值,以便正确区分它们。例如
for (const kind in UniversityEnums)
for (const value in UniversityEnums[kind])
UniversityEnums[kind][value] = kind + '_' + value;
这样你就可以写作了
function getDispString(enumValue) {
return displayStrings[enumValue];
}
注意,我可以操作枚举对象
在这种情况下,很容易:只需在枚举中放入唯一的值,以便正确区分它们。例如
for (const kind in UniversityEnums)
for (const value in UniversityEnums[kind])
UniversityEnums[kind][value] = kind + '_' + value;
这样你就可以写作了
function getDispString(enumValue) {
return displayStrings[enumValue];
}
你的
与
getDispString("Expelled")
你的新对象也会是一样的
getDispString(UniversityEnums.studentStatus.studentStatus_Expelled)
你不需要给它更多的信息,另一方面你可以像那样变换你的枚举
const UniversityEnums = {
studentStatus: {
Enrolled: {
status: 'Enrolled',
entity: 'student'
},
OnHold: {
status: 'OnHold',
entity: 'student'
},
Expelled: {
status: 'Expelled',
entity: 'student'
}
}
};
所以你会提供你需要的额外信息
你可以这样做
for (const kind in UniversityEnums)
for (const value in UniversityEnums[kind])
UniversityEnums[kind][value] = {
kind: kind,
value: value
}
从Bergi的回答中你的
与
getDispString("Expelled")
你的新对象也会是一样的
getDispString(UniversityEnums.studentStatus.studentStatus_Expelled)
你不需要给它更多的信息,另一方面你可以像那样变换你的枚举
const UniversityEnums = {
studentStatus: {
Enrolled: {
status: 'Enrolled',
entity: 'student'
},
OnHold: {
status: 'OnHold',
entity: 'student'
},
Expelled: {
status: 'Expelled',
entity: 'student'
}
}
};
所以你会提供你需要的额外信息
你可以这样做
for (const kind in UniversityEnums)
for (const value in UniversityEnums[kind])
UniversityEnums[kind][value] = {
kind: kind,
value: value
}
从Bergi的回答来看好吧,你需要通过这样或那样的方式传递学生/教授的信息。你不能从你给函数的状态中获得它,因为它们都是被驱逐的。确切地说,你指出的
被驱逐的
用例是有效的,我需要解释它们。另外,请注意,我可以管理它们ulateuniversityEnums
(但是资源是从第三方资源返回的,我无法操作(至少很容易!)当然,你可以在你的大学校园中循环找到正确的一个,但是你无法区分被开除的一个。@Bergi对于那个用例,我们不能使用对象的属性来找出它属于哪个父对象吗?例如,它是学生状态
还是教授状态
?@AleX否,更改getDispString(UniversityEnums.studentStatus.executed)
togetDispString(UniversityEnums.studentStatus.studentStatus\u executed)
没有帮助,因为您仍然在传递枚举值,而不是属性名。您需要以这种或那种方式传递学生/教授位。您无法从您给函数的状态中获得它,因为executed在这两种状态中。确切地说,您指出的executed
用例是有效的另外,请注意,我可以操纵universityEnums
(但这些资源是从第三方资源返回的,我无法操纵(至少很容易!)当然,你可以在你的大学校园中循环找到正确的一个,但是你无法区分被开除的一个。@Bergi对于那个用例,我们不能使用对象的属性来找出它属于哪个父对象吗?例如,它是学生状态
还是教授状态
?@AleX否,更改getDispString(UniversityEnums.studentStatus.executed)
togetDispString(UniversityEnums.studentStatus.studentStatus\u executed)
没有帮助,因为您仍在传递枚举值而不是属性名称。请允许我修改问题或添加注释,因为我无法更改属性名称values@AleX_您可以更改什么?但是答案是否定的,如果不更改值,仅向getDispString
函数传递一个值是不够的。(当然,还有其他方法可以以更微妙的方式更改这些值,使它们可以区分,但它们的用法可以保持不变).让我修改我的问题或添加注释,因为我无法更改values@AleX_您可以更改什么?但是答案是否定的,如果不更改值,仅向getDispString
函数传递一个值是不够的。(当然,还有其他方法可以以更微妙的方式更改这些值,使它们可以区分,但它们的用法可以保持不变)。