JavaScriptで配列の累積合計を求める方法
たとえば、次のような数値の配列があるとします。
const arr = [1, 2, 3, 4, 5, 6];
この配列を受け取り、元の配列の先頭から該当位置までの全要素を足し合わせた値を対応する要素とする、新しい配列を返すJavaScript関数を作成する必要があります。
したがって、上記の配列の場合、期待される出力は次のようになります。
const output = [1, 3, 6, 10, 15, 21];
コード例
この処理を実現するコードは以下のとおりです。
const arr = [1, 2, 3, 4, 5, 6];
const findCumulativeSum = arr => {
const creds = arr.reduce((acc, val) => {
let { sum, res } = acc;
sum += val;
res.push(sum);
return { sum, res };
}, {
sum: 0,
res: []
 });
return creds.res;
};
console.log(findCumulativeSum(arr));コードの解説
このコードでは、Array.prototype.reduce() メソッドを活用しています。アキュムレーターとして { sum, res } というオブジェクトを初期化し、配列の各要素を先頭から順に処理していきます。
ループの各ステップでは、これまでの合計値 sum に現在の要素 val を加算して更新し、その値を結果配列 res の末尾に追加します。最後に res を返すことで、累積合計を格納した新しい配列が得られます。
なお、同じ処理は以下のようにシンプルに書くこともできます。
const arr = [1, 2, 3, 4, 5, 6]; let total = 0; const output = arr.map(num => total += num); console.log(output); // [ 1, 3, 6, 10, 15, 21 ]
実行結果
コンソールには次のように出力されます。
[ 1, 3, 6, 10, 15, 21 ]
-
JavaScriptで配列を「2倍関係」を満たすように再配置できるか判定する方法
問題数値の配列 arr を第一引数(唯一の引数)として受け取るJavaScript関数を作成する必要があります。配列 arr の長さは必ず偶数であると保証されています。この関数は、すべての 0 <= i < arr.length / 2 に対して arr[2 * i + 1] = 2 * arr[2 * i] という条件を満たすように並べ替えられる場合にのみ true を返し、そうでなければ false を返す必要があります。たとえば、関数への入力が次の場合を考えてみましょう。const arr = [4, -2, 2, -4];このとき、期待される出力は次のとおりです。const
-
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) は