PDA

Просмотр полной версии : trace ассоц.массива ассоц.массивов


$mival
04.07.2007, 23:46
Дан код:

for (var y = 0, arr = []; y<=30; y++) {
arr["aaa" + y] = [];
for (var x = 0; x<=40; x++) {
arr["aaa" + y]["bbb" + x] = 0;
}
}

trace("arr: " + arr["aaa0"]["bbb0"]);
trace("arr: " + arr["aaa0"]);
trace("arr: " + arr);

Из трейсов покажет нам элемент массива только первый. Зато если мы будем использовать нумерованный массив массива:

for (var y = 0, arr = []; y<=30; y++) {
arr[y] = [];
for (var x = 0; x<=40; x++) {
arr[y][x] = 0;
}
}

trace("arr: " + arr[0][0]);
trace("arr: " + arr[0]);
trace("arr: " + arr);

то все трейсы покажут то, что надо.
Так и должно быть?
Сколько работаю, первый раз столкнулся. :mosking:

BigDan
04.07.2007, 23:57
дело в том, что в первом случае мы имеем дело не с массивом, а с объектами(в этом легко убедится: trace(arr.aaa0.bbb0)), поэтому не трейсится arr["aaa0"](потому что он не массив, а объект)
trace("arr: " + typeof arr["aaa0"]);//object

Kikasso
04.07.2007, 23:59
Так и дожно быть. "Ассоциативный массив" - это обычный массив, в который добавили свойства. Точно так же вы можете добавить свойства в любой объект, хоть в Number, хоть в Function:
function t(){};
t['test'] = 'TEST';
trace(t['test']);
var n:Number = new Number( 55 );
n['test'] = 'TEST';
n[55] = 'fiftyfive';
trace( n[55] );
trace( n['test'] );
trace(n);
Не стоит только на это полагаться ))

$mival
05.07.2007, 00:35
ок.
теперь можно со спокойной совестью идти спать.