1
0

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 1 year has passed since last update.

スプレッド構文(配列のコピーについて)

Last updated at Posted at 2022-09-11

スプレッド構文(配列のコピーについて)

Jsの配列のコピーは、「=」でコピーすると参照元が変化してしまうので、スプレッド構文(...arr1みたいな感じ)でコピーする。

const arr1 = [10, 20]

const arr2 = arr1;
arr2[0] = 100;
console.log(arr2);  // => [100, 20]

console.log(arr1);  // => [100, 20]  (*arr2のみ変更したつもりが、参照元のarr1も変更されてしまっている。。。。)

これをなくすために、スプレッド構文を使用し、配列をコピーすることで、参照元のarr1には影響を及ぼさないようになる。
(*ただし、下記の@shiracamusさんのご意見より、浅いコピー(shallow copy)で、多次元配列やオブジェクトには影響してしまうので、注意が必要です。
また、shallow copyについては、下記の記事が参考になりましたので、ぜひご参考までにお読みいただけると幸いです。
https://medium-company.com/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%82%B3%E3%83%94%E3%83%BC%E3%81%A8%E3%82%B7%E3%83%A3%E3%83%AD%E3%83%BC%E3%82%B3%E3%83%94%E3%83%BC%E3%81%AE%E9%81%95%E3%81%84/

const arr1 = [10, 20]

const arr2 = [...arr1];  // ←先ほどのconst arr2 = arr1;部分をスプレッド構文に変更。
arr2[0] = 100;
console.log(arr2);  // => [100, 20]

console.log(arr1);  // => [10, 20]  (*arr2の配列の中身を変更しても、arr1には影響を及ぼさない。)
1
0
2

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?