在将数组添加到另一个数组中以创建多维数组时遇到了一些麻烦。
代码如下所示:
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在循环的每次迭代中都是唯一的。
感谢任何帮助。
提前致谢...
答案 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次的数组。