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

JavaScriptでネストされた配列の全要素を合計する方法【flat()を使わない再帰処理】

ネストされた(入れ子になった)数値の配列を受け取り、その中に含まれるすべての数値の合計を返す関数を作ることを考えてみましょう。ただし、Array.prototype.flat() メソッドは使用しないものとします。

このようなケースでは再帰処理を使うのが最も効果的です。配列の各要素を順番に調べ、要素がさらに配列であれば自分自身を再帰的に呼び出し、数値であればそのまま合計に加算していきます。

コード例

const arr = [
    5,
    7,
    [ 4, [2], 8, [1,3], 2 ],
    [ 9, [] ],
    1,
    8
];
const findNestedSum = (arr) => {
    let sum = 0;
    for(let len = 0; len < arr.length; len++){
        sum += Array.isArray(arr[len]) ? findNestedSum(arr[len]) :
        arr[len];
    };
    return sum;
};
console.log(findNestedSum(arr));

実行結果

コンソールには次のように出力されます。

50

コードの解説

この関数のポイントは以下の3点です。

  • Array.isArray():現在の要素が配列かどうかを判定します。
  • 再帰呼び出し:要素が配列だった場合は findNestedSum を再度呼び出し、その戻り値を合計に加算します。
  • 数値の加算:要素が数値の場合は、その値をそのまま合計に足し合わせます。

このアプローチにより、どれほど深くネストされた配列でも、空の配列が含まれていても、すべての数値を漏れなく合計できます。

なお、arr.flat(Infinity) を使えば配列を完全に平坦化してから reduce() で合計を求めることも可能ですが、ここでは flat() に頼らない再帰による実装を紹介しました。再帰の考え方は、ツリー構造のデータ操作など他の場面でも応用できる重要なテクニックです。

  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

  2. 複数の値でJavaScript配列の要素を検索する方法

    JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=