31

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

filterfunction に渡されるときに、dataprovider (item.data) の各行にあるプロパティのリストを取得するにはどうすればよいですか?

たとえば、オブジェクトに次のものが含まれているとします。

  • 物体
    • 名前
    • Eメール
    • 住所

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

何か案は?

4

8 に答える 8

55

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

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の動​​的オブジェクトでも機能すると思います。表示されるプロパティは、動的でないオブジェクトに限定されていると思います。

于 2008-12-16T19:40:36.777 に答える
10

flash.utils.describeType(value:*)オブジェクトのプロパティのリストも表示されます。

于 2009-10-28T22:36:59.240 に答える
7

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

/アンドレイ。

于 2009-07-17T14:08:43.003 に答える
7

あなたはおそらく探している

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

于 2009-10-28T22:26:34.213 に答える
4

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

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
于 2012-09-11T23:14:07.040 に答える
2
// 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;
}
于 2012-05-11T23:24:43.827 に答える
1

これも役に立ちます..
1. for ループ - インデックスに基づいて機能します
2. for each - 長さまでの再帰呼び出し
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
     }
于 2015-02-13T05:52:45.373 に答える
1

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


for( var o : * in object){
    trace( o + " = " + object[o] );
}
/************* OR ******************/
for each( var o : * in object ){
    trace( "object has property: " + o );
}
于 2008-12-23T21:21:35.507 に答える