动态访问变量名称

时间:2013-12-10 18:12:57

标签: actionscript-3 flash

我有以下情况:

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);            

}

我在这里遗漏了一些明显的东西,因为[“lev”] + j不起作用。如何动态访问j-loop中的lev1-lev6?正如底部的代码注释所示,这跟踪预期。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用括号,字符串连接和this关键字访问它们。以下是如何在循环中使用括号表示法的示例:

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

答案 1 :(得分: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];
}

再次感谢您的努力:)