配列はオブジェクト
JavaScriptの配列はオブジェクトです。そのため、比較やコピーの際の挙動に注意が必要です。
配列同士の比較
配列の中身が同じでも、オブジェクトのインスタンスが異なると==では期待する比較ができないので注意が必要です。
tslist1 = [1, 2, 3];constlist2 = [1, 2, 3];console .log (list1 ==list2 );
tslist1 = [1, 2, 3];constlist2 = [1, 2, 3];console .log (list1 ==list2 );
PHPでは配列(インデックス配列)は要素の内容で等価比較できますが、JavaScriptでは同じようにはできないので注意しましょう。
php
php
このような配列の中身を比べるための演算子やメソッドはJavaScriptにはないため、中身を比較したいときにはlodashのisEqualなどのパッケージを使うのがお勧めです。
配列のコピー
配列も他のオブジェクトと同様に、代入を用いても値のコピーにはなりません。代入元の変数と代入先の変数は同じ値を指します。そして、一方の変数だけを変更したつもりでも、他方にも変更が反映されます。
tsarr = [1, 2, 3];constbackup =arr ;arr .push (4); // 変更console .log (arr );console .log (backup ); // こちらにも影響
tsarr = [1, 2, 3];constbackup =arr ;arr .push (4); // 変更console .log (arr );console .log (backup ); // こちらにも影響
上のような単純な配列のコピーには、スプレッド構文を使ってください。
tsarr = [1, 2, 3];constbackup = [...arr ]; // スプレッド構文arr .push (4); // 変更console .log (backup ); // 影響なし
tsarr = [1, 2, 3];constbackup = [...arr ]; // スプレッド構文arr .push (4); // 変更console .log (backup ); // 影響なし
📄️ 配列のスプレッド構文「...」
JavaScript の配列ではスプレッド構文「...」を使うことで、要素を展開することができます。