AS3 Array вопрос - PullRequest
       3

AS3 Array вопрос

0 голосов
/ 15 июля 2010
 var firstarray:Array = new Array();


 function traceArray(arr:Array){    
  for(var i:int = 0; i < arr.length; ++i) {
       trace(firstarray[i].matrix);    
  } 
 }



 for (var i:int = 0; i < 10; ++i) {   
  firstarray.push({ matrix:[1,0,0,1], prod:i}); 
 }

 var secondarray:Array = new Array();
 secondarray = firstarray;
 secondarray.push({ matrix:"hello" });

 traceArray(firstarray);

если результат трассировки будет

1,0,0,1 1,0,0,1 1,0,0,1 1,0,0,1
1,0,0,1 1,0,0,1 1,0,0,1 1,0,0,1
1,0,0,1 1,0,0,1 привет

или

1,0,0,1 1,0,0,1 1,0,0,1 1,0,0,1
1,0,0,1 1,0,0,1 1,0,0,1 1,0,0,1
1,0,0,1 1,0,0,1

1 Ответ

6 голосов
/ 15 июля 2010

будет выводиться:

1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
1,0,0,1
hello

Это потому, что вы устанавливаете для второго массива ту же ссылку на массив, что и для первого массива.

Если вы хотите скопировать содержимое первого массива во второй массив, используйте concat ():

secondarray = firstarray.concat();

На самом деле, поскольку вы используете массивы в массиве, вам, возможно, придется зацикливать каждый элемент и конкат копировать содержимое каждого элемента матрицы. (Простите за правки, но я только что вспомнил.;))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...