Question

Je souhaite vérifier dans ma fonction si un argument de type objet passé est vide ou non. Parfois, il est vide mais pas toujours nul, donc je ne peux pas compter sur la condition nulle. Existe-t-il des propriétés telles que 'longueur' / 'taille' pour les objets flexibles que je peux utiliser ici? S'il vous plaît aider. Merci d'avance.

Était-ce utile?

La solution

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; }

Autres conseils

Ceci est un piratage sérieux 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

Vous pouvez également essayer:

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

La bonne chose à ce propos 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 s'avérer utile.

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

var checkObject:String = myObject;

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

Cela dépend de ce que votre objet est, ou plutôt de ce que vous attendez de lui. Par exemple, si votre objet est censé contenir une propriété appelée nom que vous recherchez, vous pouvez le faire

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

ou si votre objet est censé être autre chose, 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 méthodes de réflexion, telles que ObjectUtil.getClassInfo, puis énumérer les propriétés pour rechercher des valeurs définies .... 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].@name);
            }
        }

        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 for pour vérifier les propriétés d'un objet, ce que fait cette fonction dumpobject.

Vous pouvez le vérifier directement comme suit,

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

J'ai volé cela à une question similaire concernant JS. Il nécessite FP 11+ ou une bibliothèque JSON.as.

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

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

var i:int = myObject.hasProperty("length") ? myObject.length: 0;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top