JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript入門】2つの配列が同じ値を持っているか判定する方法

JavaScriptで「2つの配列の中身(値)が同じかどうか」を判定したい場面はよくあります。しかし、配列はオブジェクト型のため、===== では参照先の比較しか行われず、中身が同じでも false になってしまいます。

そこで本記事では、sort()メソッドとforループを組み合わせて、2つの配列が同じ要素を持つかどうかを確認する方法を解説します。

前提となるサンプルコード

今回は、以下のような順番が異なる2つの配列を比較します。要素は同じですが、並び順が違う点に注目してください。

var firstArray = [100, 200, 400];
var secondArray = [400, 100, 200];

配列同士を比較する実装例

まず sort() メソッドで両方の配列を昇順にソートし、その後 for ループで各要素を1つずつ比較します。これにより、並び順に関係なく同じ値のセットを持っているかどうかを判定できます。

var firstArray = [100, 200, 400];
var secondArray = [400, 100, 200];

function areBothArraysEqual(firstArray, secondArray) {
    // 配列であること、および長さが一致していることをチェック
    if (!Array.isArray(firstArray) || !Array.isArray(secondArray) ||
    firstArray.length !== secondArray.length)
    return false;

    // 元の配列を変更しないよう、コピーを作成してからソート
    var tempFirstArray = firstArray.concat().sort();
    var tempSecondArray = secondArray.concat().sort();

    // 各要素を順番に比較
    for (var i = 0; i < tempFirstArray.length; i++) {
        if (tempFirstArray[i] !== tempSecondArray[i])
            return false;
    }
    return true;
}

if (areBothArraysEqual(firstArray, secondArray))
console.log("Both are equals");
else
console.log("Both are not equals");

コードのポイント

  • 事前チェック: Array.isArray() で両方が配列であることを確認し、長さが異なる場合は即座に false を返します。
  • 元の配列を保護: concat() で配列のコピーを作成してからソートするため、元の配列は変更されません。
  • 厳密等価演算子: !== を使うことで、型まで含めた正確な比較を行っています。

プログラムの実行方法

Node.js環境で上記プログラムを実行するには、以下のコマンドを使用します。

node fileName.js

ここでは、ファイル名を demo156.js として保存したものとします。

実行結果

PS C:\Users\Amit\JavaScript-code> node demo156.js
Both are equals

このように「Both are equals」と出力され、2つの配列が同じ値を持っていることが確認できました。もし配列内の値が1つでも異なれば、「Both are not equals」と表示されます。

まとめ

JavaScriptで2つの配列の中身を比較するには、以下の手順が有効です。

  1. Array.isArray() と length のチェックで事前検証を行う
  2. concat().sort() でコピーを作成し、両配列を同じ順序に整える
  3. forループで各要素を厳密等価演算子(!==)で比較する

この方法を使えば、要素の並び順に依存せず、確実に配列の内容を比較できます。ES6以降の環境では、every() メソッドやスプレッド構文を活用することで、さらに簡潔に記述することも可能なので、ぜひ試してみてください。

  1. JavaScriptで2つの配列を結合する方法【concat()とスプレッド構文】

    JavaScriptで2つの配列を1つにまとめたい場合、最も一般的なのが concat() メソッドです。このメソッドは、元の配列を変更することなく、複数の配列や値を連結した新しい配列を返します。 concat()メソッドの基本構文 let 新しい配列 = 配列A.concat(配列B); サンプルコード 以下は、ボタンをクリックすると2つの配列を結合し、その結果を画面に表示する完全なサンプルです。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8&

  2. JavaScriptで2つの配列を乗算する方法|forループとmap()の実装例

    JavaScriptで2つの配列の各要素同士を乗算し、その結果を新しい配列として取得する方法を解説します。基本的にはforループでインデックスを順番に処理しながら、対応する位置にある要素同士を掛け合わせていくシンプルなアプローチです。 2つの配列を乗算するサンプルコード 以下の例では、「CLICK HERE」ボタンをクリックすると、配列 arr と arr1 の対応する要素が乗算され、結果が新しい配列 multArray に格納された上で画面に表示されます。 <!DOCTYPE html> <html lang=en> <head> <meta ch