Pregunta

En ActionScript 3, hay alguna forma conveniente de determinar si una matriz asociativa (diccionario) tiene una clave particular?

Necesito realizar una lógica adicional si la llave no se encuentra. Podría detectar la excepción undefined property, pero estoy esperando que puede ser mi último recurso.

¿Fue útil?

Solución

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

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

Trate de este operador: "en"

Otros consejos

hasOwnPropery es una manera de probar para ello. Tome esto, por ejemplo:


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 forma más rápida puede ser la más 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 parece ser la solución popular, pero vale la pena señalar que sólo se ocupa de cuerdas y pueden ser costosos para llamar.

Si está utilizando objetos como claves en el diccionario hasOwnProperty no funcionarán.

La solución más fiable y performante es utilizar la igualdad estricta para comprobar si hay indefinido.

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

Recuerde que debe utilizar la igualdad estricta de lo contrario las entradas con un valor nulo, pero clave válida se verá es decir vacía.

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

Y, de hecho, como se ha mencionado el uso de in debería funcionar bien también

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

Prueba esto:

for (var key in myArray) {
    if (key == myKey) trace(myKey+' found. has value: '+myArray['key']);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top