31
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

javascript での配列のコピーの方法

Last updated at Posted at 2013-10-27

最初に

  • オブジェクトのコピーのことは、ここには書かない
  • 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, 配列, コピー, ディープコピー, シャローコピー, オブジェクト, プロパティ

31
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?