Как определить, есть ли у ассоциативного массива ключ?
-
22-08-2019 - |
Вопрос
Есть ли в ActionScript 3 какой-нибудь удобный способ определить, имеет ли ассоциативный массив (словарь) определенный ключ?
Мне нужно выполнить дополнительную логику, если ключ отсутствует.я мог бы поймать undefined property
исключением, но я надеюсь, что это будет моим последним средством.
Решение
var card:Object = {name:"Tom"};
trace("age" in card); // return false
trace("name" in card); // return true
Попробуйте этот оператор:"в"
Другие советы
hasOwnPropery
это один из способов проверить это.Возьмем это, например:
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"));
Самый быстрый способ может быть самым простым:
// 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 кажется популярным решением, но стоит отметить, что оно работает только со строками и его вызов может быть дорогостоящим.
Если вы используете объекты в качестве ключей в словаре, hasOwnProperty не будет работать.
Более надежное и производительное решение — использовать строгое равенство для проверки неопределенности.
function exists(key:*):Boolean {
return dictionary[key] !== undefined;
}
Не забудьте использовать строгое равенство, иначе записи с нулевым значением, но действительным ключом, будут выглядеть пустыми, т.е.
null == undefined // true
null === undefined // false
И на самом деле, как уже упоминалось, используя in
тоже должно работать нормально
function exists(key:*):Boolean {
return key in dictionary;
}
Попробуй это:
for (var key in myArray) {
if (key == myKey) trace(myKey+' found. has value: '+myArray['key']);
}