Выражение for each и for in

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
Ответить
Аватара пользователя
GrafMine
Сообщения: 24
Зарегистрирован: 11 ноя 2010, 00:05

Выражение for each и for in

Сообщение GrafMine »

Обучая ActionScript 3.0 тут натолкнулся на интересные выражения,и немогу понять по какому (правилу,методу,или чего-то еще) они работают...
Вот что говорится в моей "обучалке":
Выражение for each..in – как упрощенное выражение for..in. В отличие от for..in, for each..in проходит по значениям объекта, а не по именам переменных объекта или ключам. Если вам не нужно знать ключи к значениям объекта во время итерации, пожалуй, вы захотите использовать выражение for each..in вместо for..in.

Код: Выделить всё

var obj:Object = new Object();obj.a = 1;obj.b = 2;obj.c = 3;obj.d = 4;obj.e = 5;obj.f = 6;obj.g = 7;obj.h = 8;obj.i = 9;obj.k = 10;for (var key:String in obj) {trace("Trace#1 :  "+key); // key (a, b, c)trace("Trace#2 :  "+obj[key]); // value (1, 2, 3)}for each (var value:* in obj) {trace("Trace#3 :  "+value); // value without key (1, 2, 3)}
И тут как бы автор поясняет:
При первом проходе for..in будет отслеживать как ключи (a, b,c и тд), так и значения (1, 2 и 3 и тд), в то время как for each будет отслеживать только значения (1, 2, 3 и тд) и не будет иметь способа доступа к тому, какие ключи используются для определения этих значений.
Но последовательность то ууххх как хромает, и вот меня эта тема заинтересовала...

Код: Выделить всё

Trace#1 :  bTrace#2 :  2Trace#1 :  fTrace#2 :  6Trace#1 :  cTrace#2 :  3Trace#1 :  gTrace#2 :  7Trace#1 :  iTrace#2 :  9Trace#1 :  dTrace#2 :  4Trace#1 :  hTrace#2 :  8Trace#1 :  aTrace#2 :  1Trace#1 :  eTrace#2 :  5Trace#1 :  kTrace#2 :  10Trace#3 :  2Trace#3 :  6Trace#3 :  3Trace#3 :  7Trace#3 :  9Trace#3 :  4Trace#3 :  8Trace#3 :  1Trace#3 :  5Trace#3 :  10 Последовательность от первого "Trace":Trace#1 :  bTrace#1 :  fTrace#1 :  cTrace#1 :  gTrace#1 :  iTrace#1 :  dTrace#1 :  hTrace#1 :  aTrace#1 :  eTrace#1 :  k Последовательность от второго "Trace":Trace#2 :  2Trace#2 :  6Trace#2 :  3Trace#2 :  7Trace#2 :  9Trace#2 :  4Trace#2 :  8Trace#2 :  1Trace#2 :  5Trace#2 :  10 Последовательность от третьего "Trace":Trace#3 :  2Trace#3 :  6Trace#3 :  3Trace#3 :  7Trace#3 :  9Trace#3 :  4Trace#3 :  8Trace#3 :  1Trace#3 :  5Trace#3 :  10
Вот и вопрос почему такой рандомный вывод да еще и переплетающийся Trace? И вообще возможно его сделать по порядку?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Выражение for each и for in

Сообщение Александр »

Инструкция цикла for..in выполняет итерации для свойства объекта или элементов массива. Например, можно использовать инструкцию цикла for..in для выполнения итераций со значениями свойства родового объекта (свойства объекта не сохраняются в определенном порядке, поэтому свойства могут появляться в кажущемся произвольном порядке).
http://help.adobe.com/ru_RU/ActionScrip ... -7fcf.html
Ответить