21

在 ActionScript 3 中,是否有任何方便的方法来确定关联数组(字典)是否具有特定键?

如果密钥丢失,我需要执行额外的逻辑。我可以捕捉到undefined property异常,但我希望这可能是我最后的手段。

4

5 回答 5

38
var card:Object = {name:"Tom"};

trace("age" in card);  //  return false 
trace("name" in card);  //  return true

试试这个运算符:“in”

于 2009-03-31T06:05:54.673 回答
5

hasOwnPropery是您测试它的一种方式。以此为例:


var dict: Dictionary = new Dictionary();

// this will be false because "foo" doesn't exist
trace(dict.hasOwnProperty("foo"));

// add foo
dict["foo"] = "bar";

// now this will be true because "foo" does exist
trace(dict.hasOwnProperty("foo"));
于 2009-04-11T01:07:41.770 回答
4

最快的方法可能是最简单的:

// creates 2 instances
var obj1:Object = new Object();
var obj2:Object = new Object();

// creates the dictionary
var dict:Dictionary = new Dictionary();

// adding the first object to the dictionary (but not the second one)
dict[obj1] = "added";

// checks whether the keys exist
var test1:Boolean = (dict[obj1] != undefined); 
var test2:Boolean = (dict[obj2] != undefined); 

// outputs the result
trace(test1,test2);
于 2009-03-29T21:33:17.067 回答
2

hasOwnProperty 似乎是流行的解决方案,但值得指出的是,它只处理字符串并且调用起来可能很昂贵。

如果您使用对象作为字典中的键,则 hasOwnProperty 将不起作用。

更可靠和高效的解决方案是使用严格相等来检查未定义。

function exists(key:*):Boolean {
    return dictionary[key] !== undefined;
}

请记住使用严格相等,否则具有空值但有效键的条目将看起来为空,即

null == undefined // true
null === undefined // false

实际上,正如已经提到的,使用in应该也可以正常工作

function exists(key:*):Boolean {
    return key in dictionary;
}
于 2013-04-09T06:21:51.017 回答
1

试试这个:

for (var key in myArray) {
    if (key == myKey) trace(myKey+' found. has value: '+myArray['key']);
}
于 2009-03-29T19:47:31.967 回答