JavaScriptの配列で指定範囲の合計を求めるsumRange関数の実装方法
本記事では、Array.prototypeオブジェクト上に定義できる配列関数として、開始インデックスから終了インデックスまでの要素(両端を含む)の合計値を返すsumRangeメソッドの実装方法を解説します。
実装の要件
- 開始インデックスと終了インデックスを引数として受け取る
- 範囲内のすべての要素(開始・終了の両端を含む)を合計する
- 開始インデックスが終了インデックスより大きい場合は、合計値として0を返す
- 引数が省略された場合に備えてデフォルト値を設定する
サンプルコード(forループ版)
Array.prototype.sumRange = function(start = 0, end = this.length - 1){
let sum = 0;
if(start > end){
return sum;
}
for(let i = start; i <= end; i++){
sum += this[i];
}
return sum;
};
const arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.sumRange(0, 4));出力結果
コンソールには次のように表示されます。
15これは、インデックス0〜4の要素である 1 + 2 + 3 + 4 + 5 の合計です。
コードの解説
thisは、メソッドの呼び出し元である配列自身(arr)を参照します。start > endの場合は有効な範囲が存在しないため、初期値のまま0を返します。- forループでカウンタ変数
iを start から end まで動かし、各要素を累積変数sumに加算していきます。
sliceとreduceを使った簡潔な書き方
よりモダンな記述にしたい場合は、sliceとreduceを組み合わせる方法もあります。
Array.prototype.sumRange = function(start = 0, end = this.length - 1){
if(start > end) return 0;
return this.slice(start, end + 1).reduce((acc, cur) => acc + cur, 0);
};sliceは終了位置を排他的に扱うため、end + 1 を指定することで両端を含む範囲を取り出し、reduceで合計を計算しています。
プロトタイプ拡張時の注意点
組み込みオブジェクトのプロトタイプを直接拡張すると、他のライブラリとの名前の衝突や、将来の仕様変更による影響を受ける可能性があります。実務では、独立したユーティリティ関数として切り出すか、Symbolキーを利用するなどの対策を検討することをおすすめします。
-
JavaScriptでネストされた配列の加重和を計算する方法
```html 問題 任意の深さまでネストされた配列 arr を唯一の引数として受け取り、その加重和(weighted sum)を計算して返す JavaScript 関数を作成する必要があります。 加重和とは、各要素に「その要素が属するネストの深さ(レベル)」を掛けた値を、配列全体にわたって合計したものです。 入力例と出力例 たとえば、関数に次の配列を渡した場合を考えてみましょう。 const arr = [4, 7, [6, 1, [5, 2]]]; このとき、期待される出力は次のとおりです。 const output = 46; なぜ 46 になるのか? 最上位の要素はレベル1、その中
-
JavaScriptで範囲内のすべての数値の合計を求める方法
問題範囲を指定する配列を受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲に含まれるすべての自然数(両端の数値も含む)の合計を計算し、その結果を返すものとします。解決策:ループを使った実装以下のコードでは、forループを使って下限値から上限値まで順番に足し合わせていく、シンプルな実装例を示します。const range = [4, 67];const findSum = ([l, h]) => { let sum = 0; for(let i = l; i <