AS3:动态引用不同的数组?

时间:2012-08-02 09:28:47

标签: arrays actionscript-3

这可能是一个简单的,如果是,我相信我会感到愚蠢。

基本上,我有数组a1,a2和a3。

使用for语句..

for (var i 0; i < 4; i++) {
//stuff
}

如何使用i将for语句中的数据推送到其中一个数组中?也就是说,每次将数据添加到下一组中。 a [0] - &gt; a [1]等我试过getDefinitionByName,但它似乎只适用于库对象!

很抱歉,如果这很简单!

提前干杯。

编辑:

完整的代码我需要这个工作。这就是我尝试使用的第一个答案。

var fullList:Vector.<Array> = new Vector.<Array>();

for (var i1 = 0; i1 < 3; i1++)
{
    fullList.push(new Array());
}

var levelLoader:URLLoader = new URLLoader();
levelLoader.addEventListener(Event.COMPLETE, levelLoaded);
function levelLoaded(e:Event):void
{
    var indexcount = 0;
    txttileArray = e.target.data.split("a");
    txtDebug.text = txttileArray.toString();
    for (var i = 1; i < 4; i++)
    {
        temparray1 = txttileArray[indexcount].split("");
        for (var row = 0; row < temparray1.length; row ++)
        {
            var a = getDefinitionByName(temparray1[row] + "Tile") as Class;
            //trace(a);
            var b = new a  ;
            b.x = 17 + 17 * row;
            b.y = 17 + 17 * indexcount;
            addChild(b);
            fullList[indexcount].push(b);
        }
        indexcount++;
    }
}

对于凌乱的变量名称感到抱歉。

2 个答案:

答案 0 :(得分:0)

您需要在Array中使用Array。

private var fullList:Vector.<Array>;
private var total:uint = 4;

function a():void
{
    // first creating array list
    fullList = new Vector.<Array>();

    for (var i:uint = 0; i < total; i++)
    {
        fullList.push(new Array());
    }
}

function b():void
{
    // doing the stuff

    for (var i:uint = 0; i < total; i++)
    {
        switch (i)
        {
            case 0:

                fullList[i].push('zero-array-push');
                break;

            case 1:

                fullList[i].push('one-array-push');
                break;

            case 2:

                fullList[i].push('two-array-push');
                break;

            case 3:

                fullList[i].push('three-array-push');
                break;
        }
    }
}

答案 1 :(得分:0)

  

我有三个数组,a1,a2和a3。我希望能够访问这些   基于变量“i”的值的数组。所以例如,如果“我”   是1,我想将数据值推到a1。等等 - hazdog

如果您将数组a1,a2和a3作为本地(在函数中定义)变量,则无法执行此操作。如果它们是在课堂上定义的,那么这就是你如何做到的:

private var a1:Array=[];
private var a2:Array=[];
private var a3:Array=[];

private function pushValue(identifier:String, value:Object):int {
    var name:String="a" + identifier;
    var target:Array=this[name] as Array;
    if(target == null) {
        throw new Error("No such array " + name);
    } else {
        return target.push(value);
    }
}

//And then call it like this:
pushValue("1", "This value goes in array a1");
pushValue("1", "This is another value that goes in array a1");

pushValue("2", "This value goes in array a1");
pushValue("2", "This is another value that goes in array a2");

pushValue("3", "This value goes in array a3");
pushValue("3", "This is another value that goes in array a3");

否则,您可以定义一个数组数组(或数组向量),比如放置目标数组的holderArray,然后将值推送到holderArray[identifier]

修改 而不是在a1对象中定义a2a3this,而是像这样定义:

private var arrayHolder:Object={};

private function init():void {
    for(var i:int=1; i<=3; i++) {
        arrayHolder["a" + i]=new Array();
    }
}

init();

然后,您的数组将存储为arrayHolder.a1arrayHolder.a2arrayHolder.a3等 并修改pushValue如下:
变化

var target:Array=this[name] as Array;

var target:Array=arrayHolder[name] as Array;