勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

JavaScriptで配列をコピー後に値変更した際、元の配列の値も変更される点を解消する方法

  JavaScript

JavaScriptで配列をコピー後に値変更した際、元の配列の値も変更されてしまう。「const array1 = array2」のようにコピーすると配列の中身が入るわけではなく、インスタンスを参照するアドレスが入るため書き換わってしまう模様。スプレッド構文というもので対応できるようなので以下に実装方法をメモ。

 

ソースコード

NGケース

const test_array1 = [100, 200];
const test_array2 = test_array1;

test_array2[0] = 300;

console.log(test_array1); //Array [ 300, 200 ]
console.log(test_array2); //Array [ 300, 200 ]

感覚的にはtest_array2のみ書き換わりそうだけどtest_array1も書き換わるというNGケース。

OKケース

const test_array1 = [100, 200];
const test_array2 = [...test_array1];

test_array2[0] = 300;

console.log(test_array1); //Array [ 100, 200 ]
console.log(test_array2); //Array [ 300, 200 ]

test_array2のみ正常に書き換わった点が確認できる。

 

スプレッド構文

リファレンス

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax

使いどころ

今回のような配列のコピー以外では以下参考サイトが分かりやすい。

https://zenn.dev/robon/articles/4dd535ecb71d27

https://qiita.com/Nossa/items/e6f503cbb95c8e6967f8

 

所感

スプレッド構文について使いどころがイマイチ分からず、またあまり見慣れない構文のため敬遠していたが、今回のようなピンポイントな使いどころが分かったのは勉強になった。

 - JavaScript

  関連記事

ボタンをクリック時にVideo.jsの動画プレイヤーをモーダルウィンドウ表示させる方法
ボタンをクリック時にVideo.jsの動画プレイヤーをモーダルウィンドウ表示させる方法

ボタンやリンクをクリックした際、Video.jsの動画プレイヤーをモーダルウィン ...

JavaScriptの「pako」ライブラリでGzip圧縮したデータをPHPで展開する方法
JavaScriptの「pako」ライブラリでGzip圧縮したデータをPHPで展開する方法

先日、JavaScriptの「pako」ライブラリで文字列やオブジェクト(連想配 ...

jQueryでHTMLの特定要素をループ時に逆順で処理する方法
jQueryでHTMLの特定要素をループ時に逆順で処理する方法

jQueryでリスト(li)タグ等の特定要素をeach()でループ処理する場合、 ...

jQueryの通知メッセージ用ライブラリ「Toastr」の利用方法
jQueryの通知メッセージ用ライブラリ「Toastr」の利用方法

あるサイトのソースコードを拝見しているとToastrというJSファイルをCDNで ...

javascriptでランダム英数字
javascriptでランダム英数字

やりたかった事はjavascriptでランダム英数字の羅列を取得。 ■参考サイト ...