JavaScriptで2つの配列が等しいかどうかを判定する方法
本記事では、2つの数値配列(firstとsecond)を受け取り、それらが等しいかどうかを判定するJavaScript関数の実装方法を解説します。
「等しい」の定義
ここでは、配列の同等性を次の2つの条件のいずれかを満たす場合に成立するものと定義します。
- 要素の並び順に関係なく、両方の配列が同じ要素を含んでいる場合
- 1つ目の配列の全要素の合計と、2つ目の配列の全要素の合計が一致している場合
具体例
[3, 5, 6, 7, 7] と [7, 5, 3, 7, 6] は等しい配列 [1, 2, 3, 1, 2] と [7, 2] も等しい配列(合計が同じため) しかし [3, 4, 2, 5] と [2, 3, 1, 4] は等しくない
コードの実装
それでは、この関数のコードを見ていきましょう。
const first = [3, 5, 6, 7, 7];
const second = [7, 5, 3, 7, 6];
const isEqual = (first, second) => {
const sumFirst = first.reduce((acc, val) => acc+val);
const sumSecond = second.reduce((acc, val) => acc+val);
if(sumFirst === sumSecond){
return true;
};
// 元の配列を変更したくない場合はコピーを作成して使用する
const firstCopy = first.slice();
const secondCopy = second.slice();
for(let i = 0; i < firstCopy.length; i++){
const ind = secondCopy.indexOf(firstCopy[i]);
if(ind === -1){
return false;
};
secondCopy.splice(ind, 1);
};
return true;
};
console.log(isEqual(first, second));コードの解説
まずreduceメソッドで両方の配列の合計値をそれぞれ計算し、合計が一致すればその時点でtrueを返します。合計が異なる場合は、元の配列を破壊しないようにslice()でコピーを作成し、1つ目の配列の各要素が2つ目の配列内に存在するかをindexOfで確認します。見つからなければfalseを返し、見つかった要素はspliceで取り除くことで、重複要素の二重カウントを防いでいます。すべての要素が正しく対応していれば、最終的にtrueを返します。
出力結果
コンソールには以下のように出力されます。
true
-
JavaScriptの緩い等価(==)演算子とは?仕組みと使い方を解説
JavaScriptにおける「緩い等価(Loose Equality)」を表す演算子が「==」(抽象的等価演算子)です。この演算子を使うと、比較対象となるオペランド同士の値がまず共通の型へ自動的に変換され、その上で等しいかどうかが判定されます。 そのため、型が異なる値同士であっても比較が成立します。例えば、数値の 1 と文字列の 1 を比較すると、文字列側が数値へ変換されて true となります。また、undefined == null も特別なルールによって true と評価されます。 一方で、暗黙的な型変換によって意図しない結果を招く可能性があるため、実務ではより厳密な比較を行う「===
-
JavaScriptで2つの配列を乗算する方法|forループとmap()の実装例
JavaScriptで2つの配列の各要素同士を乗算し、その結果を新しい配列として取得する方法を解説します。基本的にはforループでインデックスを順番に処理しながら、対応する位置にある要素同士を掛け合わせていくシンプルなアプローチです。 2つの配列を乗算するサンプルコード 以下の例では、「CLICK HERE」ボタンをクリックすると、配列 arr と arr1 の対応する要素が乗算され、結果が新しい配列 multArray に格納された上で画面に表示されます。 <!DOCTYPE html> <html lang=en> <head> <meta ch