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

JavaScriptでネストされた配列内の数値の積を再帰的に計算する方法


ネストされた配列の中には、数値だけでなく、nullundefinedfalseなどのfalsyな値(0を含む)、さらには文字列まで混在していることがあります。本記事では、このような複雑な構造を持つ配列を受け取り、その中に存在する数値のみの積を計算して返すJavaScript関数の作成方法を解説します。

要件と考え方

今回の課題では、以下の点に注意する必要があります。

  • 配列は何重にもネストされている可能性があるため、再帰的な処理が必要です。
  • nullundefinedfalse0といったfalsyな値は積の計算から除外します。
  • 特に0は掛けると結果が0になってしまうため、明示的に無視するのがポイントです。

実装例

以下のコードをご覧ください。

const arr = [
   1, 2, null, [
      2, 5, null, undefined, false, 5, [
         1, 3, false, 0, 2
      ], 4, false
   ], 4, 6, 0
];
const recursiveMultiplication = arr => {
   let prod = 1;
   for(let i = 0; i < arr.length; i++){
      if(Array.isArray(arr[i])){
         prod *= recursiveMultiplication(arr[i]);
      }else{
         prod *= arr[i] || 1;
      };
   };
   return prod;
};
console.log(recursiveMultiplication(arr));

コードの解説

この関数は再帰的なアプローチを採用しています。処理の流れは次のとおりです。

  1. Array.isArray()メソッドで各要素が配列かどうかを判定します。
  2. 要素が配列の場合は、自分自身を再帰的に呼び出してその部分配列の積を取得します。
  3. 要素が配列以外の場合は、arr[i] || 1という論理OR演算子を使った式で積を計算します。この式により、falsyな値(nullundefinedfalse0など)はすべて1として扱われ、最終的な積に影響を与えなくなります。

出力

コンソールには以下が出力されます。

57600

  1. JavaScriptでネストされた配列の加重和を計算する方法

    ```html 問題 任意の深さまでネストされた配列 arr を唯一の引数として受け取り、その加重和(weighted sum)を計算して返す JavaScript 関数を作成する必要があります。 加重和とは、各要素に「その要素が属するネストの深さ(レベル)」を掛けた値を、配列全体にわたって合計したものです。 入力例と出力例 たとえば、関数に次の配列を渡した場合を考えてみましょう。 const arr = [4, 7, [6, 1, [5, 2]]]; このとき、期待される出力は次のとおりです。 const output = 46; なぜ 46 になるのか? 最上位の要素はレベル1、その中

  2. JavaScriptで配列内の数値と文字列数値を区別して合計差を計算する方法

    問題今回は、整数の数値型と文字列型が混在した配列を受け取るJavaScript関数を作成します。関数の仕様は以下の通りです。文字列として表現された整数をすべて合計する数値型の整数の合計から、その文字列整数の合計を引いた値を返すコード例以下がその実装コードです。const arr = [5, 2, '4', '7', '4', 2, 7, 9]; const integerDifference = (arr = []) => {     let res = 0;    &n