最初に
- オブジェクトのコピーのことは、ここには書かない
- javascript では、オブジェクト・配列の代入は参照 (reference)
- b = array とかやっても値渡しなコピーしない
- コピーの方法の王道がない (らしい)
- jQuery の場合は、コピー用の $.extend() がある
- オブジェクトに0,1,2,3とかのキーを入れたものは、配列と違う!
2つのコピー: deep & shallow コピー
deep コピーと shallowコピーの2つの方法がある
1. ディープコピー deep copy
- 完全な複製
- オブジェクトのプロパティが別オブジェクトを参照していれば、参照先オブジェクトも含めコピー
2. シャローコピー shallow copy
- プロバティ値や要素値だけのコピー
- 参照先はコピーしない
shallow コピーの方法
concat
var array = [ {a:1} ];
var array2 = [].concat(array);
deep コピーの方法
- ほとんど使うことがない
- 実装方法色々
スピード重視の場合: コピーする配列の内容に従って、効率的なコピーをするのがお勧め
参考
javascriptにおける配列のコピー | JavaScriptのQ&A【OKWave】
http://okwave.jp/qa/q3688292.html
JavaScriptでの配列のコピー - STONEDSOUL
http://stonedsoul.org/post/116226943/javascript
その他
- 破壊コピーと非破壊コピー
参考
- 「パーフェクトjavascript」 P.199
- 「開眼!JavaScript」初版第二刷 2013年11月26日
- 1.13 オブジェkとはどのように保存・複製されるか (P.23)
検索用
javascript, array, copy, deep copy, shallow copy, object, property, 配列, コピー, ディープコピー, シャローコピー, オブジェクト, プロパティ