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 个唯一数组,而不是一个被覆盖 11 次的数组。

于 2011-01-21T22:02:45.843 回答