トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     配列の複製
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
SeeDa!!
Åê¹ÆNo.24320
投稿日時: 2006-3-14 12:47
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
配列の複製
配列を複製しようとして、頭がこんがらがってしまいました
var base_array:Array = [1,2,3];
var temp_array:Array = base;
temp_array.push(4);
trace(temp_array);	// display: 1,2,3,4
trace(base_array);	// display: 1,2,3,4

temp_arrayはbase_arrayと違った配列にしたかったんですが、インスタンス名が異なるだけで、同じ内容になってしまいます。
“Flashが配列をオブジェクトとして扱っているため”という認識で合ってますか?
そこで
var base_array:Array = [1,2,3];
var temp_array:Array = [];
for (i = 0; i < base_array.length; i++) {
	temp_array.push(base_array[i]);
}
temp_array.push(4);
trace(base_array);	// display: 1,2,3
trace(temp_array);	// display: 1,2,3,4

としのぎましたが、もっとスマートに配列を複製する方法を教えていただけないでしょうか。
野中文雄
Åê¹ÆNo.24322
投稿日時: 2006-3-14 13:06
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 配列の複製
そのとおりです。変数には、参照が渡されるだけだからです。
引用:
SeeDa!!さんは書きました:
“Flashが配列をオブジェクトとして扱っているため”という認識で合ってますか?

配列エレメントがプリミティブ値なら、Array.concat()メソッドが使えます。
var base_array:Array = [1, 2, 3];
var temp_array:Array = base_array.concat();
temp_array.push(4);
trace(base_array);  // 出力: 1,2,3
trace(temp_array);  // 出力: 1,2,3,4

引用:
としのぎましたが、もっとスマートに配列を複製する方法を教えていただけないでしょうか。

エレメントにオブジェクトが含まれ、それも複製する必要がある場合には、 ObjectCopy.copy()メソッドを利用することが考えられます。

参考:「オブジェクトの複製について


----------------
 

SeeDa!!
Åê¹ÆNo.24323
投稿日時: 2006-3-14 13:14
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: 配列の複製
野中さんありがとうございます。
array.contact() はhelpで知って試してみたんですが、使い方がわからず放置してました
ご察しの通りエレメントにオブジェクトを含んでいますので、早速 ObjectCopy.copy() メソッドを試してみます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops