【问题标题】:ActionScript object name by variableActionScript 对象名称(按变量)
【发布时间】:2012-08-07 10:13:40
【问题描述】:

在这个例子中:

var poets:Array = new Array();
poets.push({name:"Angelou", born:"1928"});
poets.push({name:"Blake", born:"1757"});
poets.push({name:"cummings", born:"1894"});
poets.push({name:"Dante", born:"1265"});
poets.push({name:"Wang", born:"701"});

'name'和'born'可以是变量吗?

【问题讨论】:

    标签: apache-flex actionscript


    【解决方案1】:

    正如@RIAstar 指出的那样,它们是“关联数组”的属性 - 您的动态 Object{}

    var poets:Array = new Array();
    poets.push({"name":"test","born":"1928"});
    poets.push({name:"Angelou", born:"1928"});
    poets.push({name:"Blake", born:"1757"});
    poets.push({name:"cummings", born:"1894"});
    poets.push({name:"Dante", born:"1265"});
    poets.push({name:"Wang", born:"701"});
    
    trace(poets[0].name,poets[0].born);
    

    或者如果是更扩展的版本:

    var prop1:String = "name";
    var prop2:String = "born";
    var poets:Array = [];
    poets[0] = {};
    poets[0][prop1] = "test2";
    poets[0][prop2] = "1900";
    
    trace(poets[0].name,poets[0].born);
    

    【讨论】:

    • 是的,我的意思是,我可以创建一个函数,它会创建一个数组,我可以在其中传递属性名称,它应该使用它创建数组?因此,对该函数的一次调用将创建一个属性名称为 Born 的数组。另一个调用将创建一个姓氏的数组,死了。有可能吗?
    • 我不明白为什么这是不可能的。您可以根据需要尽可能严格或灵活地执行此操作,但请记住动态对象使用更多资源。解决这个问题的一种方法是创建一个基本类(VO)来存储这些数据:package{ class Poet{ public var firstName:String;public var lastName:String;public var yearBorn:int;public var yearDied:int; public function(f:String,n:String,b:int,d:int){firstName = f;lastName = l;yearBorn=b;yearDied=d;}} } 并创建一个数组/Vector. 并将您的数据传递给构造函数。另一种方法是像您一样使用动态对象实例,并在这些实例中的某个地方使用......
    • ...行它也可能值得一提 XML 对象,例如<poets> <poet name={nameVar} born={yearVar} /> ... </poets> 并记住 Flash Player 11 现在有 native JSON support。最后,这取决于您的数据来自哪里以及它将去往(您如何处理),因此您完全可以为您的设置找到最佳选择。
    【解决方案2】:

    如果你想创建一个返回给定属性名称的数据的函数,你可以这样做:

            public function getDataByAttribute(fieldName:String):Array {
                return poets.map(
                    function (item:*, index:int, array:Array):String {
                        return item[fieldName];                         
                    }   
                );
            }
    
            // sample call  
            var results:Array = getDataByAttribute("born");
    

    您可以修改它以满足您的需要。

    要探索 Array 的功能,请参阅blog(不是我的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多