Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Array.. reverse.. strange... (http://www.flasher.ru/forum/showthread.php?t=111010)

Mr. Fixit 14.04.2008 07:35

Array.. reverse.. strange...
 
Код:

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

Цитата:

Сообщение от __etc
for in выводит переменные в порядке добавления к объекту (примерно так).

... а добавленеы в таком порядке они были при сортировке.


Часовой пояс GMT +4, время: 12:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.