2009-10-26 9 views
6

Je souhaite vérifier ma fonction si un argument passé de type objet est vide ou non. Parfois, il est vide mais pas encore nul, donc je ne peux pas compter sur une condition nulle. Y a-t-il une propriété comme 'longueur'/'taille' pour les objets flex que je peux utiliser ici. S'il vous plaît aider. Merci d'avance.Pour vérifier si un objet est vide ou non

+0

J'ai repensé votre question avec des collections. Votre question est un peu vague, vous pouvez peut-être clarifier pour obtenir des réponses plus/meilleures. Vous utilisez une instance d'objet en tant que tableau associatif? Si vous avez besoin d'un nombre, vous utilisez peut-être la classe Array à la place. Si vous décrivez un peu mieux le contexte, il sera plus facile de répondre. –

+0

Si vous utilisez un tableau associatif, vous obtenez exactement la même chose qu'un objet. La propriété de longueur retournera toujours 0 peu importe comment faire les clés que vous remplissez. – sharvey

+0

Je voulais dire ne pas utiliser un tableau associatif, mais changer le code pour utiliser un tableau normal. Un tableau associatif indique que vous savez quelles sont les valeurs stockées et, par conséquent, vous n'avez normalement pas besoin de compter les valeurs. Mais c'est difficile à dire sans plus de détails. –

Répondre

15

Si vous voulez dire si un objet n'a pas de propriétés:

var isEmpty:Boolean = true; 
for (var n in obj) { isEmpty = false; break; } 
+0

Merci pour l'aide, il était vraiment utile, mais nous ne pouvons toujours pas avoir une méthode intégrée comme: "myObj.length"/"myObj.isEmpty" Merci encore. – Ashine

+1

Vous allez devoir étendre la classe 'Object' ou la classe' Dictionary' pour obtenir une méthode "intégrée" pour cela :) – Amarghosh

+0

Il y a monkeypatching, mais ça casse pour .. dans les boucles, ce qui ... bien .. . tu sais. –

6

Ceci est un bidouille grave mais vous pouvez utiliser:

Object.prototype.isEmpty = function():Boolean { 
    for(var i in this) 
     if(i != "isEmpty") 
      return false 
    return true 
} 

var p = {}; 
trace(p.isEmpty()); // true 
var p2 = {a:1} 
trace(p2.isEmpty()); // false 
+0

wow, c'est un truc intéressant. Vous venez de m'envoyer dans une quête pour en savoir plus sur le membre prototype. Je ne sais pas comment je pourrais l'utiliser, mais c'est un peu intéressant de connaître. – JStriedl

+0

J'essaie d'éviter les prototypes, car le compilateur Flex se plaint beaucoup. Et je dois admettre que je suis un addict d'auto-complétion ... – sharvey

+0

peut-être vérifier en utilisant 'this.hasOwnProperty (i)', dans le cas d'autres membres du prototype. –

0

dépend de ce que votre objet est, ou plutôt ce que vous attendez à avoir. Par exemple, si votre objet est censé contenir une propriété nom appelé que vous recherchez, vous pourriez faire

if(objSomeItem == null || objSomeItem.name == null || objSomeItem.name.length == 0) 
{ 
trace("object is empty"); 
} 

ou si votre objet est en fait censé être quelque chose d'autre, comme un tableau que vous pourriez faire

var arySomeItems = objSomeItem as Array; 
if(objSomeItem == null || arySomeItems == null || arySomeItems.length == 0) 
{ 
    trace("object is empty"); 
} 

Vous pouvez également utiliser d'autres moyens par la réflexion, comme ObjectUtil.getClassInfo, puis énumérer les propriétés pour vérifier les valeurs de réglage .... cette aide de la classe:

import flash.utils.describeType; 
import flash.utils.getDefinitionByName; 

public class ReflectionUtils 
{ 
    /** Returns an Array of All Properties of the supplied object */ 
    public static function GetVariableNames(objItem:Object):Array 
    { 
     var xmlPropsList:XMLList = describeType(objItem)..variable; 
     var aryVariables:Array = new Array(); 
     if (xmlPropsList != null) 
     { 
      for (var i:int; i < xmlPropsList.length(); i++) 
      { 
       aryVariables.push(xmlPropsList[i][email protected]); 
      } 
     } 

     return aryVariables; 
    } 

    /** Returns the Strongly Typed class of the specified library item */ 
    public static function GetClassByName($sLinkageName:String):Class 
    { 
     var tObject:Class = getDefinitionByName($sLinkageName) as Class; 
     return tObject; 
    } 

    /** Constructs an instance of the speicified library item */ 
    public static function ConstructClassByName($sLinkageName:String):Object 
    { 
     var tObject:Class = GetClassByName($sLinkageName); 
     //trace("Found Class: " + tMCDefinition); 
     var objItem:* = new tObject(); 
     return objItem; 
    } 

    public static function DumpObject(sItemName:String, objItem:Object):void 
    { 
     trace("*********** Object Dump: " + sItemName + " ***************"); 
     for (var sKey:String in objItem) 
     { 
      trace(" " + sKey +": " + objItem[sKey]); 
     } 
    } 
    //} 
} 

Une autre chose à noter est que vous pouvez utiliser une simple boucle pour vérifier les propriétés d'un objet, c'est ce que fait cette fonction dumpobject.

-1

peut utiliser utiliser la méthode hasProperty pour vérifier la longueur

var i:int = myObject.hasProperty("length") ? myObject.length: 0; 
+0

Son problème est qu'il n'y a pas de champ de longueur sur les objets dynamiques. – sharvey

+0

La façon dont je l'ai lu est qu'il ne savait pas s'il y avait une propriété de longueur ou non. – AndrewB

5

Vous pouvez également essayer:

ObjectUtil.getClassInfo(obj).properties.length > 0 

La bonne chose à ce sujet est que getClassInfo vous donne beaucoup plus d'informations sur l'objet, par exemple. vous obtenez le nom de toutes les propriétés de l'objet, ce qui peut vous être utile.

+0

Merci U :) Cela a réduit mes efforts ... – Prax

2

Si l'objet contient du texte mais que as3 ne le reconnaît pas comme une chaîne, convertissez-le en chaîne et vérifiez s'il est vide.

var checkObject:String = myObject; 

if(checkObject == '') 
{ 
    trace('object is empty'); 
} 
0

Vous pouvez directement vérifier comme suit,

var obj:Object = new Object(); 
if(obj == null) 
{ 
//Do something 
} 
0

J'étole ce d'une question similaire relative à JS. Il nécessite FP 11+ ou une bibliothèque JSON.as.

function isEmptyObject(obj){ 
    return JSON.stringify(obj) === '{}'; 
} 
Questions connexes