JavaScriptで2つの2次元配列が等しいかどうかを判定する方法
本記事では、2つの2次元配列(配列の中に配列が入った構造)を受け取り、両者が等しいかどうかを真偽値(boolean)で返すJavaScript関数の作成方法を解説します。
2次元配列が「等しい」とは?
ここでは、次の2つの条件を満たす場合に「等しい」と判断します。
- 両方の配列が同じ行数・列数を持っていること
- すべての行インデックス i と列インデックス j について、arr1[i][j] === arr2[i][j] が true になること
つまり、対応するすべての要素が完全に一致して初めて「等しい」とみなされ、1つでも異なる要素が存在すれば false を返します。
実装例
実際のコードは次のとおりです。
const arr1 = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
];
const arr2 = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
];
const areEqual = (first, second) => {
const { length: l1 } = first;
const { length: l2 } = second;
if (l1 !== l2) {
return false;
}
for (let i = 0; i < l1; i++) {
if (first[i].length !== second[i].length) {
return false;
}
for (let j = 0; j < first[i].length; j++) {
if (first[i][j] !== second[i][j]) {
return false;
}
}
}
return true;
};
console.log(areEqual(arr1, arr2));コードのポイント
まず、分割代入を使って外側の配列(=行数)の長さを取得し、行数が異なれば即座に false を返します。次に、各行ごとに要素数(列数)の一致を確認してから、ネストしたループで対応する要素を厳密等価演算子(===)で1つずつ比較していきます。
不一致の要素が見つかった時点で false を返すため、それ以降の不要なループ処理をスキップでき、効率的に動作します。すべての要素の比較が完了すれば、最後に true を返します。なお、ループ変数は let で宣言することで、意図しないグローバル変数の生成を防いでいます。
出力結果
コンソールには次のように表示されます。
true
-
JavaScriptの配列で使えるスプレッド演算子(...)の使い方
スプレッド構文(...)を使うと、配列などのイテラブルなオブジェクトを、0個以上の引数が期待される場所で展開することができます。これにより、配列の要素をまとめて関数の引数として渡すことが可能になります。スプレッド演算子の基本例えば、5つの引数を受け取る関数に対して5つの要素を持つ配列を渡したい場合、従来の書き方では各要素を個別に指定する必要がありました。しかし、スプレッド演算子を使えば「add(...arr)」のように記述するだけで、配列の各要素が順番に引数として展開されて渡されます。スプレッド演算子は、配列の結合やコピーなど、さまざまな場面でも活用できる便利な構文です。以下は、JavaScr
-
JavaScriptで配列の要素が2乗の関係かどうかをチェックする方法
問題 2つの数値の配列 arr1 と arr2 をそれぞれ第1・第2引数として受け取るJavaScript関数を作成することを考えます。 この関数は、arr2 のすべての要素が、出現順序に関係なく arr1 のいずれかの要素の2乗と一致する場合にのみ true を返し、それ以外の場合は false を返す必要があります。 たとえば、関数への入力が次のようであった場合を考えてみましょう。 入力 const arr1 = [4, 1, 8, 5, 9]; const arr2 = [81, 1, 25, 16, 64]; 出力 const output = true; この場合、81 = 9²、