2013-12-10 103 views
1

我有以下情形:訪問變量名動態

if (event.status == AMFResultEvent.SUCCESS) {     
var lev1:uint = 0; 
var lev2:uint = 0; 
var lev3:uint = 0; 
var lev4:uint = 0; 
var lev5:uint = 0; 
var lev6:uint = 0; 

for (var i:int = 0; i < event.result.length; i++) { 
    if (mainLevel == "1") { 
     lev1++; 
    } 
    if (mainLevel == "2") { 
     lev2++; 
    } 
    if (mainLevel == "3") { 
     lev3++; 
    } 
    if (mainLevel == "4") { 
     lev4++; 
    } 
    if (mainLevel == "5") { 
     lev5++; 
    } 
    if (mainLevel == "6") { 
     lev6++;       
    } 
} 

for (var j:int = 1; j < 7; j++) {     
    _row = new StatisticsRow(event.result[j], this); 
    _rowsPlace.addChild(_row); 
    _row.y = (_row.height +1) * j; 
    _row.codeLevel.htmlText = j; // works as it should 
    // need to access variables lev1 - lev6, called by something like "lev"+j here: 
    _row.amount.htmlText = 
} 

// traces correct amounts of mainLevels from the i loop: 
trace ("level 1: " + lev1); 
trace ("level 2: " + lev2); 
trace ("level 3: " + lev3); 
trace ("level 4: " + lev4); 
trace ("level 5: " + lev5); 
trace ("level 6: " + lev6);    

}

我缺少的東西在這裏很明顯,作爲[ 「利」] + J doen't工作。我如何動態訪問j循環中的lev1 - lev6?正如底部的代碼註釋所示,這符合預期。

在此先感謝!

回答

1

您可以使用括號,字符串連接和this關鍵字訪問它們。下面是一個如何在循環中使用括號表示法的示例:

for (var i:int = 0; i <= 6; i++) { 
    var currLev = this["lev"+i]; 
    // do stuff to currLev 
} 
+0

謝謝。我對這個話題的缺點表示歉意,但我無法完成工作。首先,應該輸入var currLev?其次,如果我使用這個關鍵字,我得到錯誤#1069:在ClassName上找不到屬性lev1。我需要引用頂部創建的變量,以某種方式將j添加到j循環中。 –

+0

儘量讓你的課程'動態'。 – Fygo

+0

這是一個相當龐大的課程,所以我寧願不改變它自己的課程,如果我不需要的話。沒有辦法通過操作變量名中的數字來引用已經創建的變量嗎? 如果我寫'_row.amount.htmlText = lev1;'該行解析它應該,但當然分配lev1值到所有行。所以我只需要通過從j循環中分配j來改變變量末尾的數字。我認爲問題是語法? –

0

感謝您的回答!

我有一個糟糕的辦法我的問題,無論如何,而且應該使用數組的時候了:再次

var mainLevels:Array = new Array(); 

for (var n:int = 1; n < 7; n++) { 
    mainLevels[n] = 0; 
} 

if (event.status == AMFResultEvent.SUCCESS) { 

    for (var i:int = 0; i < event.result.length; i++) { 

     var data = event.result[i]; 
     var correctCode:String = data["correct"]; 
     var mainLevelFound:uint = uint(correctCode.substr(0, 1)); 

     for (var k:int = 1; k < 7; k++) { 
      if (k == mainLevelFound) { 
       mainLevels[k]++; 
      } 
     } 
    } 

    for (var j:int = 1; j < 7; j++) { 

    _row = new StatisticsRow(event.result[j], this); 
    _rowsPlace.addChild(_row); 
    _row.y = (_row.height +1) * j; 
    _row.codeLevel.htmlText = j; 
    // Now this works as a reference to mainLevels[*] created above! 
    _row.amount.htmlText = mainLevels[j]; 
} 

感謝您的努力:)