繁体   English   中英

测试JavaScript关联数组中是否存在枚举值

[英]Testing for existence of enumeration value in a JavaScript associative array

我使用以下语法在javascript中构建了“枚举”:

MyEnum = {
    MY_VAL_1 : { name: "Value 1" },
    MY_VAL_2 : { name: "Value 2" },
    MY_VAL_3 : { name: "Value 3" }
};

我想存储一个包含0个或多个这些枚举值的字典,并且我希望能够测试字典中是否存在任何特定值。 我还想显示下拉列表中不在字典中的值,以及另一个下拉列表中在字典中的值,并具有允许用户使用这些下拉列表向字典中添加或删除值的按钮。

我可以使下拉列表正常工作,但是无法测试字典中是否存在for(在MyEnum中为x)字段之外的字典。 如果我使用:

list[MyEnum.MY_VAL_1]

我总是错误的(我想是因为项目存储时没有MyEnum名称空间?)。 如果我尝试:

list[MY_VAL_1]

我刚收到一个Uncaught ReferenceError。

我如何才能使它正常工作,或者有更好的方法来做到这一点?

这是到目前为止我所做的事情的jsFiddle: http : //jsfiddle.net/jKfbh/3/

MyEnum.MY_VAL_1返回您指定的对象{ name: "Value 1" }

要测试值是否在“列表”(实际上是对象或字典)中,应使用以下代码:

if (list["MY_VAL_1"]) {
    alert('val 1 is in list');
}
var MyEnum = {
MY_VAL_1 : { name: "Value 1" },
MY_VAL_2 : { name: "Value 2" },
MY_VAL_3 : { name: "Value 3" }
};
alert("MY_VAL_1" in MyEnum);

JavaScript没有枚举。 在ES5中,您可以将属性定义为密封冻结等,从而使它们的性能类似于枚举,但是,老实说,如果您发现自己需要JavaScript中的这种功能,则可能需要重新考虑设计。 这并不意味着您的设计一定很糟糕,而是JavaScript几乎不提供执行所需功能的工具。

您可以像这样检查值:

if(MyEnum['MY_VAL_1']){
    alert('val 1 in the list');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM