0

配列を別の配列に追加して多次元配列を作成する際に問題が発生しています。

コードは次のようになります。

var slideDataArray:Array = new Array();
var slideShowDataArray:Array = new Array();

slideDataArray[0] = xmlData.SlideShowParameters.SlideShowImagesDirectory;
slideDataArray[1] = xmlData.SlideShowParameters.SlideShowTimeInterval.valueOf();
slideDataArray[2] = xmlData.SlideShowParameters.SlideShowWidth.valueOf();
slideDataArray[3] = xmlData.SlideShowParameters.SlideShowHeight.valueOf();
slideDataArray[4] = slides.length();

slideShowDataArray[0] = slideDataArray;

for (i = 0; i < slides.length(); i++)   {
    // Read data from Slides tag in the XML file into slideDataArray 
    slideDataArray[0] = slides[i].SlideImage.toString();
    slideDataArray[1] = slides[i].SlideText.toString();
    slideDataArray[2] = slides[i].SlideLink.toString();

    // Input the data from slideDataArray into the array for the slideshow (slideShowDataArray) 
    slideShowDataArray[i + 1] = slideDataArray;
}
// end of FOR loop

私は、slideDataArrayを「スロット」またはslideShowDataArrayの値に配置する手段を探しています。これにより、最終的にslideShowDataArrayをパラメーターとして別の関数に渡すことができます。

現在のところ、最後の slideDataArray は、slideShowDataArray に 11 回表示されます (ループは 11 回実行されます)。slideDataArray のコードの記述方法は、ループの反復ごとに固有です。

どんな助けでも大歓迎です。

前もって感謝します...

4

1 に答える 1

2

配列を追加するのではなく、slideDataArray への参照を多次元配列に追加することに注意してください。各参照は同じ配列を指します。これには、ループの反復ごとに異なる値が含まれているだけです。つまり、その参照を追加するたびに、メモリ内の同じアドレスに「リンク」します。

これを回避するには、ループの内部を別の関数に移動し、呼び出しごとに新しいローカル配列を作成します。

function createDataArray ( slide:Object ) : Array {
    var slideDataArray:Array = [];
    slideDataArray[0] = slide.SlideImage.toString();
    slideDataArray[1] = slide.SlideText.toString();
    slideDataArray[2] = slide.SlideLink.toString();
    return slideDataArray;
}

次に、ループから呼び出します。

for (i = 0; i < slides.length(); i++)   {
    slideShowDataArray.push( createDataArray (slides[i]) );
}

11 回上書きされる 1 つの配列ではなく、11 の一意の配列になるはずです。

于 2011-01-21T22:02:45.843 に答える