Actionscript 3 AS3:通过带计数器的For循环访问阵列名称?

Actionscript 3 AS3:通过带计数器的For循环访问阵列名称?,actionscript-3,flash,Actionscript 3,Flash,我不知道您将如何称呼或定义AS3中的此类问题。 我有两个类似这样的For循环: // Here I would have 5 arrays naming from NDW1 to NDW5 var NDW1:Array = new Array(); for(var a:int = 1; a < 6; a++){ for(var b:int = 0; b < 14; b++){ // Here I want to call a function and assi

我不知道您将如何称呼或定义AS3中的此类问题。 我有两个类似这样的For循环:

// Here I would have 5 arrays naming from NDW1 to NDW5
var NDW1:Array = new Array();

for(var a:int = 1; a < 6; a++){
    for(var b:int = 0; b < 14; b++){
       // Here I want to call a function and assign it to a textfield
       this["DifferenceW"+a+"_"+b].text = CalculateDifference(Number("NDW"+a+"["+b+"]"), Number("NDW"+a+"["+b+"]")).toString();
    }
}
//这里我有5个数组,从NDW1到NDW5命名
var NDW1:Array=新数组();
对于(变量a:int=1;a<6;a++){
for(变量b:int=0;b<14;b++){
//在这里,我想调用一个函数并将其分配给一个textfield
此[“差异W”+a+“”+b]。文本=计算差异(数字(“NDW”+a+“[“+b+”]),数字(“NDW”+a+“[“+b+”])))。toString();
}
}
在使用计数器递增实际数组和数组元素时,尝试访问NDW的实际数组时出现的问题

但是当我键入“NDW”+a+“[“+b+”]”时,它只会返回一个字符串值。如何让它返回包含当前元素的数组?
因此,例如,如果
NDW1[0]=2
而不是一个字符串
NDW1[0]

在尝试使用关键字进行多个组合后,此

它可以用来访问您创建的变量,我不知道这些变量,但为了将来参考,可以访问您将使用的任何变量:

此[“变量名称”]

在我的例子中,for循环访问您将使用的元素


这[“NDW”+a][b]

5个阵列,您想在每个阵列中循环吗?将这5个数组放在1个数组中

private var _allArr:Array = [NDW1, NDW2, NDW3, NDW4, NDW5];
现在,您可以轻松访问所有内容,而无需愚蠢的字符串连接

for each (var a:Array in _allArr){
    for each (var b:Number in a){
        this["DifferenceW"+a+"_"+b].text = (CalculateDifference(a[b], a[b])).toString();
    }
}
CalculateDifference
做什么?您正在向它输入两个相同的数字,因此我希望它不会计算这些数字之间的差异(将始终为0)

无论如何。另一种循环方式是:

for (var i:int = 0; i < _allArr.length; i++){
    for (var j:int = 0; j < _allArr[i].length; j++){
        this["DifferenceW"+a+"_"+b].text = (CalculateDifference(_allArr[i][j], _allArr[i][j])).toString();
    }
}
for(变量i:int=0;i<\u allArr.length;i++){
对于(var j:int=0;j<_allArr[i]。长度;j++){
这[“差异w”+a+“+b].text=(计算差异(_allArr[i][j],_allArr[i][j])。toString();
}
}
更新 我猜您想找出NDW1[0]和NDW2[0]之间的差异,等等。如果是这样,您的CalculateDifference函数应该传递这两个值。这有点棘手。这样做:

for (var i:int = 0; i < _allArr.length; i++){
    for (var j:int = 0; j < _allArr[i].length - 1; j++){
        this["DifferenceW"+a+"_"+b].text = (CalculateDifference(_allArr[i][j], _allArr[i+1][j])).toString();
    }
}
for(变量i:int=0;i<\u allArr.length;i++){
对于(var j:int=0;j<_allArr[i]。长度-1;j++){
这[“差异w”+a+“+b].text=(计算差异(_allArr[i][j],_allArr[i+1][j])。toString();
}
}

正如其他人已经说过的,现在还不太清楚你想做什么,看起来你真的把一些本应该非常简单的事情复杂化了

不过,为了回答您的问题,使用“NDW”+a+“[“+b+”]”,您的错误在于认为可以连接字符串来创建变量名。你不能。这将始终返回一个字符串,因为它是您正在创建的字符串

您可以使用这个[“NDW”+a+“[“+b+”]”来访问它,它的计算结果是“this”对象上名为“NDW”+a+“[“+b+”]”的属性,但这并不是一件很好的事情


Neal的解决方案看起来不错,但没有在每次迭代中评估阵列的长度,因为这非常低效。

不清楚您想要实现什么。您的
calculateDifference
函数可能在做什么?你给它传递两个相同的值。。。两个相同数字之间的差值肯定是0。。。?你能解释一下你的总体目标吗。我担心你把一项简单的任务复杂化了。但是,我已经回答了您提出的问题,即使这可能是一个错误的问题。我在calculateDifference函数中有一个if语句,它检查一个数字是否在两个特定范围之间,并基本上减去两个数组项之间的差。从来没有想过将5个不同的数组添加到一个数组中,然后按照您演示的方式进行计算。这是非常常见的。如果要查找它,则称为2D数组。任何时候你想要循环通过多个东西,而这些东西本身也有多个你想要循环通过的东西。