2009-03-29 12 views
21

Gibt es in ActionScript 3 eine bequeme Möglichkeit, festzustellen, ob ein assoziatives Array (Wörterbuch) einen bestimmten Schlüssel hat?Wie ermittelt man, ob ein assoziatives Array einen Schlüssel hat?

Ich brauche zusätzliche Logik, wenn der Schlüssel fehlt. Ich könnte die undefined property Ausnahme fangen, aber ich hoffe, dass das mein letzter Ausweg sein kann.

Antwort

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

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

diesen Operator Versuchen: "in"

+0

Danke Cotton, ich wusste nicht einmal, dass der Operator außerhalb einer for-each-Schleife existiert. –

+8

Das macht mich glücklich, es ist sehr Pythonic. – Soviut

+0

Ist die Performance auch die beste Lösung? – Rihards

1

Try this:

for (var key in myArray) { 
    if (key == myKey) trace(myKey+' found. has value: '+myArray['key']); 
} 
+0

Denken Sie daran, === anstelle von == zu verwenden, denken Sie, dass Sie einen falschen Treffer erhalten könnten. –

4

Der schnellste Weg ist die einfachste sein kann:

// 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); 
+1

Funktioniert das aber, wenn Sie keinen Bezug zum Originalobjekt haben? Cottons Antwort scheint hier besser zu passen. –

+0

Hey, in Ihrer Frage erwähnen Sie Wörterbücher und nicht Objekte oder Arrays, habe ich recht? Ich habe den "in" -Operator in einer Dictionary-Instanz bisher noch nicht ausprobiert, sollte ok sein. LMK –

5

hasOwnPropery ist eine Möglichkeit, Sie testen es. Nehmen Sie dies zum Beispiel:


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")); 
2

hasOwnProperty die beliebte Lösung zu sein scheint, aber es ist erwähnenswert, dass es nur in Strings behandelt und kann teuer sein zu nennen.

Wenn Sie Objekte als Schlüssel in Ihrem Wörterbuch verwenden, funktioniert hasOwnProperty nicht.

Die zuverlässigere und performantere Lösung besteht darin, strikte Gleichheit zu verwenden, um nach undefiniert zu suchen.

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

Denken Sie daran, strenge Gleichheit sonst Einträge mit einem Null-Wert zu verwenden, aber gültiger Schlüssel wird

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

leer dh aussehen Und tatsächlich, wie in erwähnt verwenden, sollten auch

function exists(key:*):Boolean { 
    return key in dictionary; 
} 
funktionieren
Verwandte Themen