Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中获取全局对象的名称和道具_Javascript - Fatal编程技术网

如何在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的回答来看

好吧,你需要通过这样或那样的方式传递学生/教授的信息。你不能从你给函数的状态中获得它,因为它们都是被驱逐的。确切地说,你指出的
被驱逐的
用例是有效的,我需要解释它们。另外,请注意,我可以管理它们ulate
universityEnums
(但是资源是从第三方资源返回的,我无法操作(至少很容易!)当然,你可以在你的
大学校园中循环找到正确的一个,但是你无法区分被开除的
一个。@Bergi对于那个用例,我们不能使用对象的属性来找出它属于哪个父对象吗?例如,它是
学生状态
还是
教授状态
?@AleX否,更改
getDispString(UniversityEnums.studentStatus.executed)
to
getDispString(UniversityEnums.studentStatus.studentStatus\u executed)
没有帮助,因为您仍然在传递枚举值,而不是属性名。您需要以这种或那种方式传递学生/教授位。您无法从您给函数的状态中获得它,因为executed在这两种状态中。确切地说,您指出的
executed
用例是有效的另外,请注意,我可以操纵
universityEnums
(但这些资源是从第三方资源返回的,我无法操纵(至少很容易!)当然,你可以在你的
大学校园中循环找到正确的一个,但是你无法区分被开除的
一个。@Bergi对于那个用例,我们不能使用对象的属性来找出它属于哪个父对象吗?例如,它是
学生状态
还是
教授状态
?@AleX否,更改
getDispString(UniversityEnums.studentStatus.executed)
to
getDispString(UniversityEnums.studentStatus.studentStatus\u executed)
没有帮助,因为您仍在传递枚举值而不是属性名称。请允许我修改问题或添加注释,因为我无法更改属性名称values@AleX_您可以更改什么?但是答案是否定的,如果不更改值,仅向
getDispString
函数传递一个值是不够的。(当然,还有其他方法可以以更微妙的方式更改这些值,使它们可以区分,但它们的用法可以保持不变).让我修改我的问题或添加注释,因为我无法更改values@AleX_您可以更改什么?但是答案是否定的,如果不更改值,仅向
getDispString
函数传递一个值是不够的。(当然,还有其他方法可以以更微妙的方式更改这些值,使它们可以区分,但它们的用法可以保持不变)。