PDA

Просмотр полной версии : шаффл для массива взятого из класса


inspace
20.09.2007, 15:53
Есть класс all_situation, который принимает в конструктор массив и парсит его, присваивая соответствующим параметрам массивам соответствующие значения.
Этот класс имеет паблик функцию
public function get_homeschool_array():Array {
return _homeschool_array;
}

в другом классе я вызываю у объекта типа all_situation метод get_homeschool_array();
и применяю метод рандомной сортировки

private function random_scence_question() {
var arr = _all_situation.get_homeschool_array();
var rand = Math.floor(arr.length*Math.random());
_means_of_travel = arr[rand].nodeName;
_curent_scene_situation = arr[rand].childNodes;
shuffle_array();
}

public function shuffle_array() {
var z = new Number();
for(var i = 0; i < _curent_scene_situation.length; i++) {
var t = Number(Math.floor((_curent_scene_situation.length - i) * Math.random()));
z = t + i;
var _iteration_element = _curent_scene_situation[i];
var _random_element = _curent_scene_situation[z];

_curent_scene_situation[z] = _iteration_element;
_curent_scene_situation[i] = _random_element;
}
trace(_curent_scene_situation);
}

при этом, как видно, нижний трейс должен показывать рандомный массив. но тем не менее отображается та последовательность , которая описана в xml. когда я ставлю
_curent_scene_situation[z] = null;
_curent_scene_situation[i] = null;

то ровным счетом ничего не меняется - никаких нулей, та же последовательность. почему это происходит. как с этим бороться?

silin
21.09.2007, 18:04
судя по коду массивом у тебя выступает XMLNode.childNodes , а он read-only со всеми вытекающими последствиями..
как бороться зависит от задачки.., можно пользовать новый массив, в который копировать ноды xml..
_curent_scene_situation=[]
for(var i in arr[rand].childNodes){
_curent_scene_situation[i]=arr[rand].childNodes[i];
}
но сортировка будет работать только для этого массива, arr[rand].childNodes останется нетронутым..равно как и сами ноды в хмл, если их переопределить к примеру..

inspace
21.09.2007, 21:46
ок спасибо.
так и поступил )