将数组作为值推送或添加到actionscript 3.0中的多维数组中

时间:2011-01-21 21:12:08

标签: arrays flash actionscript-3 flash-cs5 scripting-language

在将数组添加到另一个数组中以创建多维数组时遇到了一些麻烦。

代码如下所示:

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的'slot'或值的方法,以便我最终可以将slideShowDataArray作为参数传递给另一个函数。

截至目前,最后一次slideDataArray在slideShowDataArray中出现了11次(循环运行11次),并且编写代码的方式是slideDataArray在循环的每次迭代中都是唯一的。

感谢任何帮助。

提前致谢...

1 个答案:

答案 0 :(得分: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个唯一数组,而不是一个被覆盖11次的数组。