【JavaScript】配列をn番目ごとの要素の合計値にまとめる方法
本記事では、数値の配列を受け取り、インデックスがnの倍数である位置にある要素だけを抽出して合計値を返すJavaScript関数の実装方法を解説します。
実装の考え方
この関数は、以下の手順で実装できます。
- 合計を保持する変数を0で初期化する
- forループで配列を先頭から順に走査する
- 現在のインデックスがnumで割り切れる場合のみ、その要素を合計に加算する
- 該当しないインデックスはcontinue文でスキップする
- ループ終了後、最終的な合計値を返す
コード例
実際のコードは以下の通りです。
const arr = [1, 4, 5, 3, 5, 6, 12, 5, 65, 3, 2, 65, 9];
const num = 2;
const nthSum = (arr, num) => {
let sum = 0;
for(let i = 0; i < arr.length; i++){
if(i % num !== 0){
continue;
};
sum += arr[i];
};
return sum;
};
console.log(nthSum(arr, num));
出力結果
コンソールには次のように表示されます。
99
処理の解説
上記のコードでは、インデックス0から始めて2番目ごとの要素、すなわちインデックスが0, 2, 4, 6, 8, 10, 12の位置にある要素を加算しています。具体的には以下の計算が行われています。
1 + 5 + 5 + 12 + 65 + 2 + 9 = 99
別のアプローチ: filterとreduceを活用する
より簡潔に関数型スタイルで書きたい場合は、filter()とreduce()を組み合わせる方法も便利です。
const nthSumAlt = (arr, num) =>
arr.filter((_, i) => i % num === 0)
.reduce((acc, val) => acc + val, 0);
console.log(nthSumAlt(arr, num)); // 99
こちらの書き方では、まず条件に一致する要素だけを新しい配列として取り出し、その後reduce()で一括して合計しています。可読性が高く、意図も伝わりやすいのがメリットです。
-
JavaScriptでソート済み2次元配列からN番目に小さい要素を求める方法
問題の概要昇順にソートされた数値の2次元配列(行列)が与えられたとします。const arr = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ];この配列を第1引数として受け取り、整数 num を第2引数として受け取るJavaScript関数を作成します。関数は、配列 arr 内に存在する num 番目に小さい要素を返す必要があります。例えば、関数への入力が以下の場合を考えてみましょう。const arr = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ]; const
-
JavaScriptで配列要素をそのインデックスでべき乗した値に変換する方法
問題 数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、入力配列の各要素を、その要素の位置を示す0始まりのインデックスでべき乗し、新しい配列へと変換します。そして最終的に、この新しい配列を返します。 例えば、インデックス0にある要素は0乗(常に1)、インデックス3にある要素は3乗、というように各要素が処理されます。 実装のポイント ループで配列を走査しながら、各要素とそのインデックスを同時に取得する Math.pow() を使って「要素 ^ インデックス」を計算する 計算結果を結果配列の同じ位置に格納する なお、モダンなJavaScriptでは Math