如何影响整个数组?

时间:2011-06-26 20:57:52

标签: flash actionscript-3 actionscript

我有一个用于保存影片剪辑的数组,我希望能够使用该数组一次更改所有这些数组。现在,我可以使用array[0,1,2,3,4,5,6,7,8...].changestuff来做,但是有60个左右的动画片段,它变得笨拙。有没有更简单的方法来遍历整个数组并将更改应用于存储在?

中的每个动画片段

3 个答案:

答案 0 :(得分:1)

如果你有一个类似这样的MovieClip数组:

var a:Array = new Array;
for ( var j:int = 0; j < 10; j++ )
    a[j] = new MovieClip;

你有3种循环方式并影响其中的所有MovieClip。第一个是循环的基本:

var len:int = a.length;
for ( var i:int = 0; i < len; i++ )
{
    var mc:MovieClip = a[i];
    trace( mc );
}

循环的基本循环是循环数组的最快方法。您只需要使用括号运算符在特定索引处找到MovieClip。 a[i]将返回当前索引处的MovieClip(例如a[0]将返回数组开头的MovieClip,a[1]下一个,等等。

你也可以做一个for..each:

for each( var mc:MovieClip in a )
    trace( mc );

For..each循环比正常for循环略慢,但是具有直接访问对象的额外好处,已经已经转换。它可以很方便

最后使用forEach()方法:

a.forEach( this._loopFunc );

private function _loopFunc( mc:MovieClip, index:int, a:Array ):void
{
    trace( mc + " is at index " + index + " in array " + a );
}

我从未真正看到forEach()在任何地方使用过,但您可能会发现它很有用。对于回调,您需要声明3个参数,对象,索引和数组本身。

您可以在Array文档中找到更多信息:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

答案 1 :(得分:0)

另一种方法是使用:

for(var item in collection) { ... }

未列在链接中。

答案 2 :(得分:-1)

一次操作整个数组的最佳方法是使用map方法。

来自Adobe LiveDocs的mapping示例

    public function arrayMap() {
        var arr:Array = new Array("one", "two", "Three");
        trace(arr); // one,two,Three

        var upperArr:Array = arr.map(toUpper);
        trace(upperArr); // ONE,TWO,THREE
    }

    private function toUpper(element:*, index:int, arr:Array):String {
        return String(element).toUpperCase();
    }

在你的情况下,你只需编写一个回调方法来操纵你的影片剪辑,但必要时会返回一个MovieClip而不是String。