2011-01-21 76 views
0

我在将数组添加到另一个数组以创建多维数组时遇到了一些麻烦。在actionscript 3.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在循环的每次迭代中都是唯一的。

任何帮助表示赞赏。

在此先感谢...

回答

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次的一个数组。

+0

感谢这个信息。你能给我更多的信息,为什么代码运行的方式? – forgivenphoenix 2011-01-21 22:59:26