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
所感
スプレッド構文について使いどころがイマイチ分からず、またあまり見慣れない構文のため敬遠していたが、今回のようなピンポイントな使いどころが分かったのは勉強になった。
関連記事
-
-
CKEditor5(WYSIWYGエディタ)をページ遷移無しでtextareaに切り替える方法
ラジオボタンを選択することでCKEditor5(ウィジウィグエディタ)とテキスト ...
-
-
jQueryで同サーバ内のCSVを読み込み、配列やオブジェクトとして取り扱う方法
先日バニラJavaScriptで同サーバ内のCSVを読み込み、配列として取り扱う ...
-
-
郵便番号を入力すると住所を自動で入力してくれる「ajaxzip3」ライブラリの利用方法
お問い合わせフォームのようなページで郵便番号及び住所欄がある場合、ユーザーが郵便 ...
-
-
金融機関コード(銀行番号)や支店コード(支店番号)から銀行名や支店名を取得する方法
金融機関コード(銀行番号)や支店コード(支店番号)をから銀行名や支店名を取得した ...
-
-
JavaScriptでメール送信を行える「EmailJS」の利用方法
お問い合わせフォーム等の記入内容をメールで送信する際、通常はPHP等サーバサイド ...