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テストする方法の 1 つです。たとえば、次のようにします。


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 は機能しません。

より信頼性が高くパフォーマンスの高いソリューションは、厳密な等価性を使用して undefined をチェックすることです。

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

厳密な等価性を使用することを忘れないでください。そうしないと、null 値を持つエントリでも有効なキーは空に見えます。

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 に答える