Edited at

JavaScriptで配列のコピー(値渡し)

More than 1 year has passed since last update.


はじめに

JavaScriptでは、配列はオブジェクトの一つであり、オブジェクトは参照渡しになるため、配列も参照渡しになります。

したがって、変数にはオブジェクトの参照が格納されています。

以下のようなコードでは変更が参照先にも適用されます。

// Arrayオブジェクトの生成とarr1にその参照を代入

var arr1 = [0, 1, 2, 3, 4];

// arr2にarr1に入っている参照を代入
var arr2 = arr1;

// arr2を変更
arr2[1] = 5;

// arr1でも変更される
print(arr1[1]); // 5

上のコードのarr1とarr2で別の配列を参照するようにすることを「値渡し」でコピーすると言います。


値渡しをする方法


slice

Array.slice(start, end)はインデックスstartからインデックスendまでの要素を持つ配列を新しく生成する方法。

したがって、以下のようにして配列全体を切り出して新しく配列を生成すればよい。

var arr1 = [0, 1, 2, 3, 4];

var arr2 = arr1.slice(0, arr1.length);

// 引数なしでも同じことができる
var arr3 = arr1.slice();


concat

Array.concat([item0, item1, ...])は引数に渡した配列を連結した新しい配列を生成する方法。

したがって、以下のように引数を渡さなければ何も連結していない新しいは配列が生成される。

var arr1 = [0, 1, 2, 3, 4];

var arr2 = arr1.concat();