【JavaScript】再帰処理でネストされた配列内のすべての整数を合計する方法
ネストされた(入れ子になった)配列に含まれるすべての整数を合計するには、同じ関数を何度も呼び出す「再帰処理」を使います。配列の要素を一つずつ調べ、要素がさらに配列であれば自分自身を再度呼び出し、整数であれば合計に加算する、という流れで処理を行います。
サンプルコード
function sumOfTotalArray(numberArray){
var total = 0;
for (var index = 0; index < numberArray.length; index++) {
// 要素が配列の場合は、同じ関数を再帰的に呼び出す
if (numberArray[index] instanceof Array){
total = total + sumOfTotalArray(numberArray[index]);
}
// 要素が整数の場合は合計に加算する
if (typeof numberArray[index] === "number" &&
numberArray[index] === Math.round(numberArray[index])){
total = total + numberArray[index];
}
}
return total;
}
var number = new Array(6);
number = [10, 20, [30, 40], [50, [60]]];
console.log("The sum is=" + sumOfTotalArray(number));
プログラムの実行方法
上記のプログラムを実行するには、次のコマンドを使用します。
node fileName.js
ここでは、ファイル名を「demo53.js」としています。
実行結果
プログラムを実行すると、次のような出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo53.js
The sum is=210
コードのポイント解説
このコードを理解するうえで重要なポイントは次の3つです。
- instanceof Array:要素が配列かどうかを判定します。配列であれば、sumOfTotalArray() を再帰的に呼び出して、その中身をさらに処理します。
- Math.round() との比較:値を四捨五入した結果と元の値が一致すれば整数だと判断できます。あわせて typeof による型チェックを組み合わせることで、文字列などが混在している場合でも安全に判定できます。
- 再帰の利点:配列が何段階に入れ子になっていても、同じロジックですべての整数を取り出して合計できます。上の例では [50, [60]] のように二重に入れ子になっていても、正しく合計 210 が計算されます。
なお、再帰呼び出しの際には、ループ中の要素そのもの(numberArray[index])を引数として渡す点に注意してください。誤って別の変数を渡すと ReferenceError が発生したり、正しい合計が得られなくなったりします。この点さえ押さえておけば、任意の深さのネストされた配列に対して柔軟に対応できる汎用的な合計関数になります。
-
JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説
Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g
-
【JavaScript】配列内のネストされたオブジェクトの値を合計する方法
この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d