добавление или добавление массивов в качестве значений в многомерный массив в ActionScript 3.0 - PullRequest
0 голосов
/ 22 января 2011

У меня возникают проблемы с добавлением массива в другой массив для создания многомерного массива.

Код выглядит следующим образом:

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, чтобы в конце я смог передать слайд-шоу-массив в качестве параметра другой функции.

На данный момент последний слайд-массив данных появляется 11 раз (цикл выполняется11 раз) в slideShowDataArray и способе написания кода, slideDataArray уникален для каждой итерации цикла.

Любая помощь приветствуется.

Заранее спасибо ...

1 Ответ

2 голосов
/ 22 января 2011

Помните, что вы добавляете не массив, а ссылку на 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 раз.

...