JavaScriptで2つの数値配列が等しいかどうかを判定する方法
課題
2つの数値配列(first と second)を受け取り、両者が等しいかどうかを判定するJavaScript関数を作成する必要があります。
次のいずれかの条件を満たす場合、2つの配列は等しいとみなされます。
- 同じ要素が同じ順序で格納されている
- 最初の配列の全要素の積と、2番目の配列の全要素の積が等しい
入力データの例
最初の数値配列:
const first = [3, 5, 6, 7, 7];
2番目の数値配列:
const second = [7, 5, 3, 7, 6];
サンプルコード
以下にコード例を示します。
const first = [3, 5, 6, 7, 7];
const second = [7, 5, 3, 7, 6];
const isEqual = (first, second) => {
// 各配列の全要素の積を計算
const prodFirst = first.reduce((acc, val) => acc * val);
const prodSecond = second.reduce((acc, val) => acc * val);
// 積が一致していれば等しいとみなす
if (prodFirst === prodSecond) {
return true;
}
// 要素を先頭から順に比較
for (let i = 0; i < first.length; i++) {
if (first[i] === second[i]) {
continue;
}
return false;
}
return true;
};
console.log(isEqual(first, second));
実行結果
このコードを実行すると、コンソールには次の出力が表示されます。
true
コードの解説
まず reduce() メソッドを使って、各配列の全要素を掛け合わせた積を計算しています。first の場合は 3 × 5 × 6 × 7 × 7 = 4410、second の場合は 7 × 5 × 3 × 7 × 6 = 4410 となり、両者の積が一致するため関数は true を返します。
もし積が一致しなかった場合は、続く for ループでインデックス0から順に要素を1つずつ比較し、不一致が見つかった時点で false を返します。最後まで一致すれば true を返します。
なお、通常の用途では要素をそのまま比較する方法が一般的ですが、今回のような「並び順が異なっても積が同じなら等しい」という特殊な要件では、積による判定が有効です。また、厳密な配列比較が必要な場合は、長さの確認を追加したり every() メソッドを活用するのも良いでしょう。
-
JavaScriptで数値の配列に対してべき乗演算を実行する方法
問題 私たちは、偶数の長さを持つ整数の配列 arr を引数として受け取る JavaScript 関数を記述する必要があります。 ここで、次のような数値 num を考えます − num = (arr[0] * arr[0] + arr[1] * arr[1]) * (arr[2] * arr[2] + arr[3] * arr[3]) * … * (arr[n-2] * arr[n-2] + arr[n-1] * arr[n-1]) このとき n は配列の長さを表します。つまり、配列を隣り合う2つの要素ごとのペアに分割し、各ペアの平方和をすべて掛け合わせた値が num となります。 この関数は
-
JavaScriptで数値配列の分散を計算する方法
問題昇順にソートされた数値の配列を受け取り、その分散(Variance)を計算するJavaScript関数を作成する必要があります。分散とは、一連の数値が平均値からどれだけばらついているかを表す統計量で、まず平均値を求め、その平均との差の二乗和をデータ数で割ることで計算できます。計算式まず、平均値(M)は次のように定義されます。$Mean (M) = ( \sum_{i=0}^{n-1} arr[i])$ / n続いて、分散(V)は各要素と平均値の差を二乗し、それらを合計してデータ数で割った値になります。Variance (V) = $(\sum_{i=0}^{n-1} (arr[i] - M