Question

Dans ActionScript 3, est-il un moyen pratique de déterminer si un tableau associatif (dictionnaire) a une touche particulière?

Je dois effectuer une logique supplémentaire si la clé est manquante. Je pourrais attraper l'exception undefined property, mais j'espère que cela peut être mon dernier recours.

Était-ce utile?

La solution

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

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

Essayez cet opérateur: "dans"

Autres conseils

hasOwnPropery est une façon de tester pour elle. Prenez ceci par exemple:


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

La façon la plus rapide peut être la plus simple:

// 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 semble être la solution populaire, mais il est intéressant de souligner que ce ne traite que des chaînes et peuvent être coûteux à appeler.

Si vous utilisez des objets comme les clés dans votre dictionnaire hasOwnProperty ne fonctionnera pas.

Le plus fiable et d'une solution performante consiste à utiliser une stricte égalité pour vérifier non défini.

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

Rappelez-vous d'utiliser une stricte égalité autrement entrées avec une valeur nulle, mais la clé valide regardera i.e. vide.

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

Et en fait, comme cela a été mentionné à l'aide in devrait fonctionner correctement aussi

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

Essayez ceci:

for (var key in myArray) {
    if (key == myKey) trace(myKey+' found. has value: '+myArray['key']);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top