JavaScript if文で配列を比較するサンプル

JavaScriptのif文の配列の比較のサンプルです。

目次

説明 if文で配列を比較するときの注意点
  同じ値の配列を比較する
方法 配列の値を比較する方法1(toStringメソッド)
  配列の値を比較する方法2(for文)
参考 参照先を渡して比較する(シャローコピー)

if文で配列を比較するときの注意点

JavaScriptの変数のデータ型は、基本型と参照型があります。

基本型とは?

数値や文字列のデータ型は、基本型です。
変数に数値や文字列を代入した場合、値が格納されます。

参照型とは?

参照型のデータは、変数に代入するとアドレスが格納されます。
値は、指定されたアドレスの先にあります。

配列は、参照型です。

そのため、if文で単純に配列の変数を比較した場合、値ではなく参照先(アドレス)が等しいか判定することになるので注意が必要です。

 

配列の変数を比較した場合

配列の変数を比較した場合のサンプルです。

<script>
    const color1 = ["red", "yellow", "blue"];
    const color2 = ["red", "yellow", "blue"];

    if (color1 == color2) {
        console.log("OK");
    } else {
        console.log("NG"); //NG
    }
</script>

2行目と3行目は同じ値の配列です。
5行目は、配列の変数を比較しています。参照先が異なるのでif文の判定はfalseになります。

 

配列の値を比較する方法1(toStringメソッド)

配列の値を比較するサンプルその1です。
ArrayオブジェクトのtoStringメソッドを使用します。

<script>
    const color1 = ["red", "yellow", "blue"];
    const color2 = ["red", "yellow", "blue"];

    if (color1.toString() == color2.toString()) {
        console.log("OK"); //OK
    } else {
        console.log("NG");
    }

    console.log(color1.toString()); //red,yellow,blue
    console.log(color2.toString()); //red,yellow,blue
</script>

2行目と3行目は同じ値の配列です。
5行目のtoStringメソッドは、配列の値を文字列にして比較するのでif文の判定はtrueになります。

以下は、MDNのArrayオブジェクトのtoStringメソッドのリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/toString

 

配列の値を比較する方法2(for文)

配列の値を比較するサンプルその2です。
for文を使用します。

<script>
    const color1 = ["red", "yellow", "blue"];
    const color2 = ["red", "yellow", "blue"];

    let flg = "一致";

    for (let i = 0; i < color1.length; i++) {
        if (color1[i] !== color2[i]) {
            flg = "不一致";
            break;
        }
    }
    console.log(flg); //一致が表示される
</script>

2行目と3行目は同じ値の配列です。
7行目のfor文でループさせています。
8行目のif文で配列の値を1つずつ比較しています。

 

参照先を渡して比較する(シャローコピー)

参照先を渡して比較するサンプルです。

<script>
    let color1 = ["red", "yellow", "blue"];
    let color2 = [];

    //参照先を渡す
    color2 = color1;

    if (color1 == color2) {
        console.log("OK"); //OK
    } else {
        console.log("NG");
    }

    color1[1] = "オレンジ";

    console.log(color1); // ["red", "オレンジ", "blue"]
    console.log(color2); // ["red", "オレンジ", "blue"]
</script>

2行目と3行目は配列です。
6行目は、配列color1の参照先を変数のcolor2に代入しています。
参照先のコピーは、シャローコピーと呼ばれます。(shallow=浅い)

8行目のif文は、同じ参照先なのでtrueになります。
14行目は、変数color1の値を変更しています。
16,17行目は、変数の値を表示しています。
変数の参照先が同じため、color1とcolor2の値が同じになっています。

関連の記事

[JavaScript] if文 条件分岐を行うサンプル
JavaScript if文の == と === の違い
JavaScript 配列の仕組みと使い方のサンプル
JavaScript for...in文とfor...of文のサンプル
JavaScript 配列で関数を使用(forEach/map/filter/reduce)

△上に戻る