こんにちは、さるまりんです。
配列に数値が入っているとしてそれらを加算する関数を書いてみました。
全ての値を加算
// 配列arrayの値を加算する
function sum(array) {
// 合計を格納する変数
var sum = 0;
// 配列の長さまで
for(var i = 0; i < array.length; i++) {
// ひとつずつ足していく
sum += array[i];
}
// 結果を返却
return sum;
}
関数sumに渡しているarrayが数値をもつ配列という想定で実装しています。
簡単にやってますよ。
配列の長さ分その要素にアクセスし一つずつを足し合わせ結果を返却しています。
部分的に値を加算
今度は配列の一部分の値を加算する関数です。
最初のいくつ、最後のいくつを加算する
// 配列arrayの最初のnum個を加算する
function sumFirst(array, num) {
// 合計を格納する変数
var sum = 0;
// 配列の最初からnumまで(もしくは配列の最後まで)
for(var i = 0; i < array.length && i < num; i++) {
// ひとつずつ足していく
sum += array[i];
}
// 結果を返却
return sum;
}
// 配列arrayの最後のnum個を加算する
function sumLast(array, num) {
// 合計を格納する変数
var sum = 0;
// 配列の長さよりもnumが大きければ配列の長さまでとする
if(array.length < num) num = array.length;
// 配列の後ろからひとつずつnum個
for(var i = num; i > 0; i--) {
// ひとつずつ足していく
sum += array[array.length-i];
}
// 結果を返却
return sum;
}
関数sumFirst()
、sumLast()
はそれぞれ配列の中を前からと後ろから指定された数の値を足し合わせます。
では真ん中のいくつかはどうでしょう。次の関数sumBetween()
でやってみました。
いくつ目からいくつ目までを加算する
//配列arrayのbegin番目からend番目の値を加算する
function sumBetween(array, begin, end) {
// 合計を格納する変数
var sum = 0;
// beginが0未満であれば0番目からに
if(begin < 0) begin = 0;
// endが(arrayの長さ-1)以上であれば(arrayの長さ-1)番目までに
if(end > array.length - 1) end = array.length - 1;
// beginからendまで
for(var i = begin; i <= end; i++) {
// ひとつずつ足していく
sum += array[i];
}
// 結果を返却
return sum;
}
これまた簡単にやってみました。
4つの関数の実行例です。
// 10の数値を含む配列です。
var ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 全てを加算
console.log("sum all : " + sum(ary));
// 最初の5個を加算
console.log("sum first 5 : " + sumFirst(ary, 5));
// 最初の11個を加算→10個しかないので10個
console.log("sum first 11 : " + sumFirst(ary, 11));
// 最後の5個を加算
console.log("sum last 5 : " + sumLast(ary, 5));
// 最後の11個を加算→10個しかないので10個
console.log("sum last 11 : " + sumLast(ary, 11));
// 0番目から9番目(結局は配列全体)を加算
console.log("sum between 0 & 9 : " + sumBetween(ary, 0, 9));
// 3番目から5番目を加算 (indexは0始まり)
console.log("sum between 3 & 5 : " + sumBetween(ary, 3, 5));
// -1番目から10番目を加算 (オーバーしているので最初から最後まで)
console.log("sum between -1 & 10 : " + sumBetween(ary, -1, 10));
上記を実行すると
sum all : 55
sum first 5 : 15
sum first 11 : 55
sum last 5 : 40
sum last 11 : 55
sum between 0 & 9 : 55
sum between 3 & 5 : 15
sum between -1 & 10 : 55
と出力されます。
実装してみるといろんなことを考えますね。
エラーにならないように下限も上限もオーバーしないように値を調整しています。
ですが、array
が配列か、num
やbegin
、end
が数値か、そして加算されるarray
の中の値が数値かどうかのチェックはしてません。。
した方がいいですね。
どんな風にチェックしてエラー処理するかはまた改めて考えていきたいと思います。
書き方としても、もっとスマートにかけますよね。
今後、改善していきたいと思います。
読んでくださってありがとうございました。
ではまた!