PDA

Просмотр полной версии : Array.. reverse.. strange...


Mr. Fixit
14.04.2008, 07:35
var rightArray : Array = new Array();

for(var i : Number = 0; i<5; i++) {
rightArray.push('omg this\'s horrible : ' + i);
}

rightArray.reverse();

for(var j : String in rightArray) {
trace(rightArray[j]);
}

По идее трейс должен вывести 0, 1, 2, 3, 4. :)
Но почему-то выводит 1, 3, 0, 4, 2:rtfm:
Кто что думает по этому поводу?? Получается метод reverse() класса Array переиндусен:confused:

UPD:
Проверил на 3м языке, все показывает правильно.
Во втором AS с этим методом баг. Точнее его итерация с перебором массива через for(... in ...)

udaaff
14.04.2008, 08:25
По идее трейс должен вывести 0, 1, 2, 3, 4.
По идее трейс должен вывести 4, 3, 2, 1, 0, что он, собственно, и делает (без for всмысле)
trace(rightArray); // 4,3,2,1,0
Видимо, reverse() при переформировании массива, добавляет элементы в порядке: 2, 4, 0, 3, 1, и, соответсвенно, for in выводит 1, 3, 0, 4, 2.

CorC
14.04.2008, 09:48
Полагаться на правильность вывода for in плохо, лучше обычным for

etc
14.04.2008, 09:59
for in выводит переменные в порядке добавления к объекту (примерно так). Использовать for … in для перебора элементов массива в порядке возрастания индексов нельзя.

iNils
14.04.2008, 14:26
for in выводит переменные в порядке добавления к объекту (примерно так).... а добавленеы в таком порядке они были при сортировке.