Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
86
Help us understand the problem. What is going on with this article?
@takahiro_itazuri

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

More than 3 years have 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();
86
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
86
Help us understand the problem. What is going on with this article?