JavaScriptで2次元配列の要素を交互に加減算して合計を求める方法
問題の概要
行数と列数が同じ m × n の2次元配列(数値の行列)を受け取り、次の式で表される合計値を計算して返すJavaScript関数を作成します。
$\sum_{i=1}^m \sum_{j=1}^n (-1)^{i+j}a_{ij}$
この式が意味するのは、各要素に対して「インデックス i + j の偶奇」に応じて符号を切り替えるということです。具体的には、(i + j) が偶数である要素は正の符号で加算し、奇数である要素は負の符号で減算します。チェス盤のように市松模様状にプラスとマイナスが交互に並ぶイメージです。
計算イメージ
0始まりのインデックスで考えると、左上の要素 (0, 0) は (0 + 0) が偶数なのでプラス、その隣 (0, 1) は奇数なのでマイナス、という具合に斜め方向に同じ符号が並んでいきます。
コード例
以下が実装コードです。
const arr = [
[4, 6, 3],
[1, 8, 7],
[2, 5, 9]
];
const alternateSum = (arr = []) => {
let sum = 0;
for(let i = 0; i < arr.length; i++){
for(let j = 0; j < arr[i].length; j++){
const multiplier = (i + j) % 2 === 0 ? 1 : -1;
sum += (multiplier * arr[i][j]);
};
};
return sum;
};
console.log(alternateSum(arr));出力
7
コードの解説
このコードでは、二重のforループを使って配列内のすべての要素を順番に走査しています。内側のループの中で (i + j) % 2 === 0 という条件式によって、現在の要素にかける係数を決定しています。
- i + j が偶数の場合: multiplier は 1 となり、要素はそのまま加算されます。
- i + j が奇数の場合: multiplier は -1 となり、要素は減算されます。
サンプルの配列の場合、計算過程は 4 − 6 + 3 − 1 + 8 − 7 + 2 − 5 + 9 = 7 となるため、結果として 7 が出力されます。
なお、この実装の計算量は O(m × n) であり、配列の全要素を一度ずつ処理するため効率的です。また、行数と列数が異なる長方形の配列に対しても、そのまま同じロジックで動作する汎用的な書き方になっています。
-
【JavaScript】配列内のネストされたオブジェクトの値を合計する方法
この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d
-
JavaScriptで数値と文字列が混在する配列の合計を求める方法
問題整数と文字列形式の数字(例えば 34 や 23 など)が混在した配列を受け取り、その配列内のすべての値を合計して、合算された新しい数値を返すJavaScript関数を作成する必要があります。文字列形式の数字も数値として扱い、すべて足し合わせるのがポイントです。解決アプローチこの問題を解く最もシンプルな方法は、各要素に単項プラス演算子「+」を適用することです。単項プラス演算子は文字列を数値に変換できるため、文字列と整数が混在する配列でもそのまま合計計算ができます。以下はその実装コードです。 { let sum = 0; for(let i = 0; i < arr.lengt