2012-08-28 62 views
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].qnamequestions[0](qname)訪問數組屬性

回答

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"]來訪問屬性。

1

但如果你不能做什麼在以前的答案被告知(例如,你從服務器獲取這些字符串),你可以使用普通expresions很好地獲取這些值:

var searchPattern : RegExp = /(?P<qname>(?<=qname\:)[a-zA-Z0-9_]+(?=[\s,]*))/g; 
trace(searchPattern.exec(questions[1]).qname); // traces out: mc_02 
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"); 

OR:

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

這方面提供的好處intellisense用於獲取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 = [email protected]; 
    question.value = questionXML.text(); 
    questions.push(question); 
}