web-dev-qa-db-ja.com

Actionscriptでオブジェクトのプロパティのリストを取得するにはどうすればよいですか?

データプロバイダーと、データプロバイダーに割り当てられた配列のフィルター関数があります。

Dataprovider(item.data)の各行にあるプロパティのリストをフィルター関数に渡すときに取得するにはどうすればよいですか?

たとえば、私のオブジェクトが含まれている場合:

  • オブジェクト
    • 名前
    • eメール
    • 住所

次に、フィルター関数で名前、電子メール、およびアドレスを確認できるようにします。残念ながら、これらのプロパティが事前にどのようになるかはわかりません。

何か案は?

30
GeoffreyF67

動的オブジェクトの場合、次のようなことができると思います。

var obj:Object; // I'm assuming this is your object

for(var id:String in obj) {
  var value:Object = obj[id];

  trace(id + " = " + value);
}

それがAS2で行われている方法であり、AS3の動​​的オブジェクトでも引き続き機能すると考えています。表示されるプロパティは、非動的オブジェクトではより制限されると思います。

53
Herms

flash.utils.describeType(value:*) は、オブジェクトのプロパティのリストも提供します。

10
Joel Hooks

おそらく探しています

ObjectUtil.getClassInfo(object) 

、見る:

http://livedocs.Adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#getClassInfo%28%29

XMLに非動的データ型として扱う原因となるバグがあることに注意してください。バグの詳細:bugs.Adobe.com/jira/browse/SDK-17712

7
Robert Bak

for-inは、動的オブジェクトに対してのみ機能します。型付きオブジェクトの場合、プロパティ名を取得するために何らかのリフレクションを使用する必要があります(例 http://www.as3commons.org/as3-commons-reflect/index.html

/アンドレイ。

6

私にとってはこれだけが役に立ちました:

trace('obj = '+getProperties(obj));

        public static function getProperties(obj:*):String  {
            var p:*;
            var res:String = '';
            var val:String;
            var prop:String;
            for (p in obj) {
                prop = String(p);
                if (prop && prop!=='' && prop!==' ') {
                    val = String(obj[p]);
                    if (val.length>10) val = val.substr(0,10)+'...';
                    res += prop+':'+val+', ';
                }
            }
            res = res.substr(0, res.length-2);
            return res;
        }

次のようなものが得られます:

obj = m:email@ra..., r:true
3
Billion
// this method will work for retrieving properties of a *non-dynamic* (typed) object

// @return - all object properties
public function getProperties(_obj : *) : Array
{
        var _description : XML = describeType(_obj);
        var _properties : Array = new Array();
        for each (var prop:XML in _description.accessor)
        {
                var _property : Object = new Object();
                _property.name = String(prop.@name);
                _property.type = String(simple_type(prop.@type));
                _property.access = String(prop.@access);
                _property.declaredBy = String(prop.@declaredBy);
                try
                {
                   _property.value = _obj[_property.name];
                }
                catch (e : Error)
                {
                   _property.value = "";
                }
                _properties.Push(_property)
        }
        _properties.sortOn("name");
        return _properties;
}

// better format for object class information
private function simple_type(_type : String) : String
{
        var lastIndex : int = _type.lastIndexOf("::");
        _type = lastIndex > 0 ? _type.substr(lastIndex + 2) : _type;
        return _type;
}
2

これも役立ちます。
1。 for Loop-インデックスに基づいて機能します
2。それぞれ-長さまでの再帰呼び出し
3。 for in-プロパティ値の読み取りに使用

     for( var obj : String in objectData ) //here objectData is your object
     {
        trace( "Object Name Is : " + obj );
        var data : Object = objectData[obj]; //here we get the object value by using the property name
        trace( "Value Is : " + data ); //Converts object to string
     }

for .. inループを使用してプロパティ名を取得するか、for for .. inループを使用してプロパティ値を取得できます...


for( var o : * in object){
    trace( o + " = " + object[o] );
}
/************* OR ******************/
for each( var o : * in object ){
    trace( "object has property: " + o );
}
1
ForYourOwnGood