Ошибка при многократном вызове функции сортировки массива
День добрый.
Краткое описаниее проблемы:
Есть массив currentItems, в котором есть какие-то случайные числовые значения. Его надо присвоить трем переменным и перемешать каждую из них в случайном порядке.
Реализовано так: для каждой из переменных получаю массив со случайными индексами от 1 до 1000 (getIndexes()), после чего эти же переменные отдаю на сортировку (sortArray()).
А после того, как вывожу получившийся результат (после трех вызовов sortArray()), все переменные принимают значение последнего вызова функции sortArray(). Причем, если выводить внутри самой sortArray(), то все нормально.
Код AS1/AS2:
var currentItems:Array = new Array();// Select items, that will use in the game.
var items1:Array = new Array();
var items2:Array = new Array();
var items3:Array = new Array();
var count = 22;
function formArray(num:Number) {
for (i = 0; i < num; i++) {
//trace(currentItems[i]);
currentItems[i] = random(count);
}
}
function getIndexes(num:Number) {
var indexes:Array = new Array();
for (i = 0; i < num; i++) {
indexes[i] = random(1000);
//trace(i);
}
return indexes;
}
function sortArray(inp:Array){
var tmp:Number = new Number();
var sortArr = currentItems;
for (i = 0; i < inp.length; i++) {
//trace("");
for (k = i; k < inp.length; k++) {
if (inp[k] < inp[i]) {
tmp = inp[i];
inp[i] = inp[k];
inp[k] = tmp;
tmp = sortArr[i];
sortArr[i] = sortArr[k];
sortArr[k] = tmp;
}
}
}
trace("sortArr: " + sortArr);
return sortArr;
}
formArray(9);
trace("Array: "+ currentItems);
trace("");
trace("Get random indexes");
items1 = getIndexes(currentItems.length);
items2 = getIndexes(currentItems.length);
items3 = getIndexes(currentItems.length);
trace(items1);
trace(items2);
trace(items3);
trace("Sorted indexes");
items1 = sortArray(items1);
items2 = sortArray(items2);
items3 = sortArray(items3);
trace(items1);
trace(items2);
trace(items3);
Пример вывода:
Код:
Array: 18,13,3,12,12,5,20,21,16
Get random indexes
17,924,517,925,887,321,758,237,492
440,773,456,730,540,370,82,483,968
831,138,374,541,31,507,194,529,48
Sorted indexes
sortArr: 18,21,5,16,3,20,12,13,12
sortArr: 12,20,18,5,13,3,16,21,12
sortArr: 13,12,20,16,18,3,21,5,12
13,12,20,16,18,3,21,5,12
13,12,20,16,18,3,21,5,12
13,12,20,16,18,3,21,5,12
Три строчки «SortArr: xxxxxxxxx» — это вывод из самой функции перед тем, как она вернет свое значение.
Причем если выводить значения переменных после каждого вызова функции, то выводятся адекватные значения. Но после того как функция вызвана 3 раза, все переменный берут значения последнего вызова.
Код AS1/AS2:
items1 = sortArray(items1);
trace(items1);
items2 = sortArray(items2);
trace(items2);
items3 = sortArray(items3);
trace(items3);
trace("");
trace(items1);
trace(items2);
trace(items3);
Пример вывода:
Код:
Array: 14,15,14,15,16,18,19,2,4
Get random indexes
802,963,768,426,203,828,752,458,658
184,43,693,465,677,591,421,321,99
632,947,952,722,619,849,559,72,87
Sorted indexes
sortArr: 16,15,2,4,19,14,14,18,15
16,15,2,4,19,14,14,18,15
sortArr: 15,15,16,18,14,4,14,19,2
15,15,16,18,14,4,14,19,2
sortArr: 19,2,14,14,15,18,4,15,16
19,2,14,14,15,18,4,15,16
19,2,14,14,15,18,4,15,16
19,2,14,14,15,18,4,15,16
19,2,14,14,15,18,4,15,16
Чтобы не было ощущения абстрактного примера: currentItems — это выборка случайных элементов из массива с данными длинной count.
Есть способ заствить переменные принимать реально возвразаемые значения функции, а не ее последнего вызова?
Спасибо всем, кто откликнется.
|