JavaScriptで配列をコピーする
JavaScriptで配列をコピーするときは次のような注意が必要です。
a=[10,20,30];
b=a;
b=a;
配列変数aを配列変数bにコピーしています。
これで配列変数bをaの代わりに使うことができます。
次にpopを使ってaの最後の要素をクリアします。
a.pop();
この場合、bには何も影響しないように思われますが、実行結果は次のようになります。
a=[10,20]
b=[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();
for(i=0;i<a.length;i++){
b[i]=a[i];
}
a.pop();
実行結果は次の通り。
a=[10,20]
b=[10,20,30]
b=[10,20,30]
意図通り、aだけが処理されました。
なお次のような簡単な方法もあります。
sliceを使うと配列を部分的に抜き出すことができます。
第1引数にセットした位置から第2引数にセットした位置の前まで抜き出します。
第1引数に「0」をセットし、第2引数を省略すると、最初から最後までを抜き出しますので、配列の各要素をコピーするのと同じ効果があります。
a=[10,20,30];
b=a.slice(0);
a.pop();
b=a.slice(0);
a.pop();
[ 2011年8月16日 | カテゴリー: JavaScript | タグ: JavaScript , tips , 配列 ]
« すたみな太郎 千葉北店 | ユーロホップ »
コメントを残す