Frage

In Actionscript 3, gibt es eine bequeme Möglichkeit, zu bestimmen, ob ein assoziatives Array (Wörterbuch) einen bestimmten Schlüssel?

Ich brauche zusätzliche Logik auszuführen, wenn der Schlüssel fehlt. Ich konnte die undefined property Ausnahme fangen, aber ich hoffe, dass meine letztes Mittel sein.

War es hilfreich?

Lösung

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

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

Versuchen Sie diesen Operator: "in"

Andere Tipps

hasOwnPropery ist eine Möglichkeit, Sie testen. Nehmen Sie diese 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"));

Der schnellste Weg kann die einfachste sein:

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

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

Wenn Sie mit Objekten als Schlüssel in Ihrem Wörterbuch hasOwnProperty wird nicht funktionieren.

Je zuverlässige und performante Lösung ist strikte Gleichheit zu verwenden, um nicht definiert zu überprüfen.

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

Denken Sie daran, strenge Gleichheit sonst Einträge mit einem Null-Wert zu verwenden, aber gültigem Schlüssel leer d.h aussehen.

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

Und tatsächlich, wie erwähnt in verwenden, sollte auch funktionieren

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

Versuchen Sie folgendes:

for (var key in myArray) {
    if (key == myKey) trace(myKey+' found. has value: '+myArray['key']);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top