JavaScriptで配列をコピーする

Pocket

JavaScriptで配列をコピーするときは次のような注意が必要です。

a=[10,20,30];
b=a;

配列変数aを配列変数bにコピーしています。
これで配列変数bをaの代わりに使うことができます。

次にpopを使ってaの最後の要素をクリアします。

a.pop();

この場合、bには何も影響しないように思われますが、実行結果は次のようになります。

a=[10,20]
b=[10,20]

bもaと同じく最後の要素がクリアされます。
つまり「b=a」とすると各要素がコピーされるのではなく「bはaを参照する」ということになるのです。
したがって各要素をコピーするためには次のようにします。

a=[10,20,30];
for(i=0;i<a.length;i++){
  b[i]=a[i];
}
a.pop();

実行結果は次の通り。

a=[10,20]
b=[10,20,30]

意図通り、aだけが処理されました。

なお次のような簡単な方法もあります。
sliceを使うと配列を部分的に抜き出すことができます。
第1引数にセットした位置から第2引数にセットした位置の前まで抜き出します。
第1引数に「0」をセットし、第2引数を省略すると、最初から最後までを抜き出しますので、配列の各要素をコピーするのと同じ効果があります。

a=[10,20,30];
b=a.slice(0);
a.pop();

[ 2011年8月16日 | カテゴリー: JavaScript | タグ: , , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報