作者afu70 ()
看板Flash
標題Re: [問題] 請問關於陣列的合併
時間Fri Aug 3 21:40:42 2007
由於陣列的資料較為龐大
所以指定資料給變數 會以參造的方式來呈現
如果你想複製一個新的陣列 則不能直接用"="來指定
例如
var a_ary:Array=[1,2,3]
var b_ary:Array=a_ary
b_ary.push(4)
trace(b_ary)
trace(a_ary)
會發現兩者都一樣
這是因為b_ary只是參造到a_ary的位址而已
不算是一個新的陣列
這時候可以用兩種作法來複製
一種是用迴圈+推:
var a_ary:Array=[1,2,3]
var b_ary:Array=new Array()
for(i=0;i< a_ary.length;i++){
b_ary.push(a_ary[i])
}
但是這樣比較麻煩點 要寫3行
另一種作法是用投機取巧的 用黏的(concat)或用切的(slice):
1行就可以複製新的陣列了
var a_ary:Array=[1,2,3]
var b_ary:Array=a_ary.concat()
或
var b_ary:Array=a_ary.slice()
此時
b_ary.push(4)
trace(b_ary)
trace(a_ary)
會發現會有不一樣的結果
會分享這個方法是因為......
我用前面的笨方法用了一兩年了
最近才發現這個新方法 介紹給大家
※ 引述《aquarianboy (我是沒牌的營養師!)》之銘言:
: ※ 引述《Angelliya (澪澪)》之銘言:
: : 問題是
: : 假設有兩個陣列A_array及b_array
: : 想讓陣列C_array有陣列A及B的內容時...要怎麼連接呢
: : var a_array:Array = new Array();
: : my_array[0] = "1111";
: : my_array[1] = "2222";
: : //
: : var b_array:Array = new Array();
: : my_array[0] = "aaaa";
: : my_array[1] = "bbbb";
: : //
: : 想讓陣列c的結果是"1111","2222","aaaa","bbbb"
: : 請問該怎麼做連接呢?
: var a_array:Array = new Array();
: a_array[0] = "1111";
: a_array[1] = "2222";
: var b_array:Array = new Array();
: b_array[0] = "aaaa";
: b_array[1] = "bbbb";
: var c_array1:Array = new Array();
: var c_array2:Array = new Array();
: //用push
: c_array1.push(a_array);
: c_array1.push(b_array);
: //用concat
: c_array2 = a_array.concat(b_array);
: trace(c_array1);
: trace(c_array2);
: 用推的或用黏的都可以 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.10.81
1F:推 jonathanmeow:聽君一席話 茅塞頓開! 自從發現不能array=array 08/03 21:52
2F:→ jonathanmeow:就用三行的那個方法 可是卻不曉得為什麼會這樣.... 08/03 21:52
3F:推 afu70:原理跟Object一樣 是用"參照"的 就像你指定一個物件 你可以 08/06 04:54
4F:推 afu70:用var obj:Object=_root.aaa_mc.bbb_mc.ccc_mc 來縮短這麼長 08/06 04:57
5F:→ afu70:的物件絕對路徑 但是並不是複製一個新的物件出來 只是"參照" 08/06 04:58
6F:推 Angelliya:好文推 ^^" 08/06 12:55