オブジェクトが空かどうかを確認するには
-
06-07-2019 - |
質問
渡されたオブジェクト型の引数が空かどうかを関数でチェックインしたい。時々空ですが、それでもヌルではないため、ヌル条件に頼ることはできません。ここで使用できるフレックスオブジェクトの「長さ」/「サイズ」などのプロパティがあります。 助けてください。 事前に感謝します。
解決
オブジェクトにプロパティがない場合:
var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }
他のヒント
これは深刻なハックですが、使用できます:
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
次を試すこともできます:
ObjectUtil.getClassInfo(obj).properties.length > 0
それについての良い点は、getClassInfoがオブジェクトに関するより多くの情報を提供することです。オブジェクト内のすべてのプロパティの名前を取得します。これは便利な場合があります。
オブジェクトに「テキスト」が含まれているが、as3がそれを文字列として認識しない場合、それを文字列に変換して空かどうかを確認します。
var checkObject:String = myObject;
if(checkObject == '')
{
trace('object is empty');
}
オブジェクトが何であるか、あるいはオブジェクトが何を持っているかによって異なります。たとえば、オブジェクトに、nameという名前のプロパティを含める必要がある場合、次のようにします
if(objSomeItem == null || objSomeItem.name == null || objSomeItem.name.length == 0)
{
trace("object is empty");
}
またはオブジェクトが実際に何か他のものであると想定されている場合、配列のように
var arySomeItems = objSomeItem as Array;
if(objSomeItem == null || arySomeItems == null || arySomeItems.length == 0)
{
trace("object is empty");
}
ObjectUtil.getClassInfoなど、リフレクションを介して他の方法を使用し、プロパティを列挙して設定値を確認することもできます。このクラスのヘルプ:
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]);
}
}
//}
}
注意すべきもう1つの点は、単純なforループを使用してオブジェクトのプロパティを確認できることです。これが、このdumpobject関数の動作です。
次のように直接確認できます
var obj:Object = new Object();
if(obj == null)
{
//Do something
}
JSに関する同様の質問からこれを盗みました。 FP 11+またはJSON.asライブラリが必要です。
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
hasPropertyメソッドを使用して長さを確認できます
var i:int = myObject.hasProperty("length") ? myObject.length: 0;