2
var questions:Array = new Array;
questions[0] = "qname:mc_01, qvalue:1";
questions[1] = "qname:mc_02, qvalue:1";
questions[2] = "qname:mc_03, qvalue:1";
questions[3] = "qname:mc_04, qvalue:1";
questions[4] = "qname:mc_05, qvalue:1";
questions[5] = "qname:mc_06, qvalue:1";
questions[6] = "qname:mc_07, qvalue:1";
questions[7] = "qname:mc_08, qvalue:1";
questions[8] = "qname:mc_09, qvalue:1";
questions[9] = "qname:mc_10, qvalue:1";
questions[10] = "qname:mc_11, qvalue:2";
questions[11] = "qname:mc_12, qvalue:2";
questions[12] = "qname:mc_13, qvalue:2";
questions[13] = "qname:mc_14, qvalue:2";
questions[14] = "qname:mc_15, qvalue:2";
questions[15] = "qname:mc_16, qvalue:2";
questions[16] = "qname:mc_17, qvalue:2";
questions[17] = "qname:mc_18, qvalue:2";
questions[18] = "qname:mc_19, qvalue:2";
questions[19] = "qname:mc_20, qvalue:2";
questions[20] = "qname:mc_21, qvalue:3";
questions[21] = "qname:mc_22, qvalue:3";
questions[22] = "qname:mc_23, qvalue:3";
questions[23] = "qname:mc_24, qvalue:3";
questions[24] = "qname:mc_25, qvalue:3";
questions[25] = "qname:mc_26, qvalue:3";
questions[26] = "qname:mc_27, qvalue:3";
questions[27] = "qname:mc_28, qvalue:3";
questions[28] = "qname:mc_29, qvalue:3";
questions[29] = "qname:mc_30, qvalue:3";

我有这个数组,想访问该qname属性,但不记得该怎么做。questions[0].qname是类似的东西questions[0](qname)吗?

4

3 回答 3

6

您已将数组元素定义为字符串而不是对象。试试这个:

var questions:Array = new Array;
questions[0] = {qname:mc_01, qvalue:1};
...

花括号代替双引号。使用引号创建字符串。使用花括号,您可以创建动态对象并设置它们的属性。因此,如果要为 创建字符串值qname,请确保将其定义为qname:"mc_01"而不是qname:mc_01

因此,您可以使用questions[0].qnamequestions[0]["qname"]访问属性。

于 2012-08-28T19:53:45.670 回答
1

但是,如果您不能按照先前答案中的说明进行操作(例如,您从服务器获取这些字符串),则可以使用常规表达式很好地获取这些值:

var searchPattern : RegExp = /(?P<qname>(?<=qname\:)[a-zA-Z0-9_]+(?=[\s,]*))/g;
trace( searchPattern.exec(questions[1]).qname ); // traces out: mc_02
于 2012-08-29T08:46:17.390 回答
0

当您标记 ActionScript 3.0 时,它是一种强类型语言,我建议使用类型化类来保存您的数据结构。

package your.package.name
{
    public class Question
    {
        protected var _name:String;
        protected var _value:String;

        public function Question(name:String = null, value:String = null)
        {
            this.name = name;
            this.value = value;
        }

        public function get name():String 
        {
            return _name;
        }

        public function set name(value:String):void 
        {
            _name = value;
        }

        public function get value():String 
        {
            return _value;
        }

        public function set value(value:String):void 
        {
            _value = value;
        }
    }
}

通过拥有 getter 和 setter 并在构造函数中公开这些道具,您可以通过两种方式创建它们:

var question:Question = new Question("Question1", "Question value");

或者:

var question:Question = new Question();
question.name = "Question1";
question.value = "Question value";

这在智能感知方面提供了好处,可以在您的 ide 中获取属性,并且还可以键入安全性以阻止您为名称和值输入不正确的类型。

然后抓住一个问题:

questions[0].name; // in this example Question1
questions[0].value; // in this example Question value

通常,您的问题将来自某些数据源,例如 xml 或 Web 服务,无论我将在此示例中使用什么文字 xml,在这种情况下,您可能希望在某个循环中构建您的对象,例如:

var questionsXML:XML = 
<questions>
    <question name="Question1">Question1 value</question>
    <question name="Question2">Question2 value</question>
    <question name="Question3">Question3 value</question>
</questions>

然后:

var questions:Array = [];

for each (var questionXML:XML in questionsXML.question) 
{
    var question:Question = new Question();
    question.name = questionXML.@name;
    question.value = questionXML.text();
    questions.push(question);
}
于 2012-08-29T09:17:06.993 回答