2014-04-25 44 views
0
var oldArray:Array = new Array("a", "o", "a", "o", "a", "o", "a", "o"); 

     for (var i:int = 0; i < oldArray.length; i++) { 


    if (i % 2 == 0) { 
    trace("go to array 1 " + i); 
    applesArray.push(oldArray[i]); 
    } 

    if (i % 2 != 0) { 
    trace("go to array 2 " + i); 
    orangesArray.push(oldArray[i]); 
    } 

} 

那些前兩個痕跡出來,如我所料,但如果我跟蹤oneArray和twoArray他們出來相同。這些陣列如何可以相同?

trace(applesArray); (橙子數組);

它們怎麼可能是相同的?

+1

「applesArray」和「orangesArray」是如何聲明的? – raina77ow

+0

將'oldArray [i]'添加到trace語句中,用於「進入數組1」或2,或許您沒有從「oldArray」中獲得期望的結果。 'trace(「去數組1」,我,oldArray [i]);' – Vesper

+1

如果你也會發布你的痕跡輸出 –

回答

2

我才能夠重現「錯誤」與此代碼:

var oldArray:Array = new Array("a", "o", "a", "o", "a", "o", "a", "o"); 
var applesArray:Array; 
var orangesArray:Array; 
applesArray = orangesArray = [];//this makes it invalid 
     for (var i:int = 0; i < oldArray.length; i++) { 


    if (i % 2 == 0) { 
    trace("go to array 1 " + i); 
    applesArray.push(oldArray[i]); 
    } 

    if (i % 2 != 0) { 
    trace("go to array 2 " + i); 
    orangesArray.push(oldArray[i]); 
    } 
}   
trace(applesArray); 
trace(orangesArray); 

//traces output 
go to array 1 0 
go to array 2 1 
go to array 1 2 
go to array 2 3 
go to array 1 4 
go to array 2 5 
go to array 1 6 
go to array 2 7 
a,o,a,o,a,o,a,o 
a,o,a,o,a,o,a,o 

,如果它是你做了什麼,那麼你一定要記住,數組是不是像它是按值傳遞的一些基本對象,像其他複雜對象的數組通過引用傳遞,並且您的兩個變量都指向同一個對象。

+0

也是1000倍更快找到解決方案。謝謝,這就是問題所在。我不知道你不能將另一個數組分配給一個數組。 – oppositefrog

+0

你可以,但它會分配引用對象而不是該對象的副本:) –