スプレッド構文(配列のコピーについて)
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には影響を及ぼさない。)