よかったらこっちで見てください -> http://phiary.me/javascript-array-sum-average-median
モダンといっても ECMAScript 5 から追加されたメソッドを使ってるってだけです...
サンプルはこちら.
合計値を求める
イケてない実装
普通に for 文回す.
var sum = function(arr) {
var sum = 0;
for (var i=0,len=arr.length; i<len; ++i) {
sum += arr[i];
};
return sum;
};
var arr = [1, 2, 3, 4, 5];
console.log( sum(arr) ); // 15
ちょっと今風
Array.prototype.forEach
使ってます.
var sum = function(arr) {
var sum = 0;
arr.forEach(function(elm) {
sum += elm;
});
return sum;
};
var arr = [1, 2, 3, 4, 5];
console.log( sum(arr) ); // 15
モダンな感じ
Array.prototype.reduce
ってやつ使ってます.
隣り合う要素に関数を適応していく関数です.
var sum = function(arr) {
return arr.reduce(function(prev, current, i, arr) {
return prev+current;
});
};
var arr = [1, 2, 3, 4, 5];
console.log( sum(arr) ); // 15
さらにモダンっというか多機能
関数渡せるようにしてみました.
fn を省略した場合普通のが呼ばれます.
var sum = function(arr, fn) {
if (fn) {
return sum(arr.map(fn));
}
else {
return arr.reduce(function(prev, current, i, arr) {
return prev+current;
});
}
};
var arr = [1, 2, 3, 4, 5];
console.log( sum(arr) ); // 15
console.log( sum(arr, function(elm) {
return elm*2;
})); // 30
var arr2 = ['a', 'b', 'c'];
console.log( sum(arr2) ); // abc
console.log( sum(arr2, function(elm) {
return elm.charCodeAt();
}) ); // 249
ついでに平均値と中央値求めるのも作ってみた
平均値
sum 使い回し.
var average = function(arr, fn) {
return sum(arr, fn)/arr.length;
};
var arr = [1, 2, 3, 4, 5];
console.log( average(arr) ); // 3
中央値
fn は sort 用関数です.
var median = function(arr, fn) {
var half = (arr.length/2)|0;
var temp = arr.sort(fn);
if (temp.length%2) {
return temp[half];
}
return (temp[half-1] + temp[half])/2;
};
console.log(median([1, 2, 3, 4, 5])); // 3
console.log(median([1, 2, 3, 4, 5, 6])); // 3.5
console.log(median([6, 6, 1, 2, 3, 4, 5])); // 4
Qiita もっと下書き残せるようにしてくれー!><