如何在AS3中的for each
构造内通过引用传递值?基本上,我想要一些与PHP中的以下代码相同的东西:
foreach ($array as &$v) {
$v = $v + 1;
}
这将允许我通过单个循环更改集合$array
的所有元素。
答案 0 :(得分:5)
AS3中不存在指针,因此您需要使用Array.forEach方法对数组中的每个项执行函数:
有点偏离主题,但有关AS3中的值和引用的更多信息(对于函数)
在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于原始数据类型的对象(包括Boolean,Number,int,uint和String)具有特殊的运算符,使它们的行为就像它们按值传递一样。
答案 1 :(得分:1)
你不能用PHP的方式做到这一点。 for each循环将产生一个可用于获取值的引用变量v,但设置v = v + 1不会更改原始数组,但擦除引用并仅将新值设置为v。但您仍然可以修改一个循环中的所有数组值:
对于一个简单的数组:
var array1 : Array = [ "one", "two", "three" ];
for (var i : int = 0; i < array1.length; i++)
{
array1[i] = "number " + array1[i];
}
对于关联数组(它实际上是Flash中的对象),请使用... in:
var array2 : Object = { one:"one", two:"two", three:"three" };
for (var s:String in array2) // s is the string value of the array key
{
array2[s] = "number " + array2[s];
}
我认为第二个是你正在寻找的。 p>
答案 2 :(得分:0)
编辑:weltraumpirat是正确的。我原来的例子没有修改原始数组的内容,这可能是原始海报想要的内容。以下是一些更新的示例:
使用for each
更新了示例:
for each (var s:String in arr)
{
arr[arr.indexOf(s)] = "<Your value here>";
}
使用标准for
循环更新示例:
for (var counter:int = 0; counter < arr.length; counter++)
{
arr[counter] = "<your value here>";
}
原始示例[不正确]:
for each (var s:String in array)
{
s = <your value here>;
}