JavaScript 高階関数の使用例
// JavaScript 高階関数(higher-order function)
// 引数として関数を受け取る、または、戻り値が関数である関数のことを高階関数と呼ぶ。
/**
* 引数の関数オブジェクトを保持し、
* 「保持した関数の処理結果を文字列として返す関数」を返す関数。
* @param {string} nm 処理名称
* @param {function} fn 関数オブジェクト
* @return {function} 関数オブジェクト
*/
function decorate(nm, fn){
return function decorateInner(...arg){
return `${nm}の計算結果は${fn(...arg)}です。`;
}
}
/**
* 平均値を計算する
* @param {Array} 計算対象
* @return {number} 計算結果
*/
var funcAvr = function(...arg){
var sum = 0;
arg.forEach(m => sum += m);
return sum / arg.length;
}
/**
* 中央値を計算する(偶数の場合は真ん中2つの平均)
* @param {Array} 計算対象
* @return {number} 計算結果
*/
var funcMed = function(...arg){
var ar = [...arg];
ar.sort((a,b)=>a-b);
var p = Math.floor(ar.length/2);
// 要素数が奇数
if(ar.length % 2 == 1){
return ar[p];
}
// 要素数が偶数
return (ar[p-1] + ar[p]) / 2;
}
// 関数decorateに処理名称と関数オブジェクトを渡す。戻り値として関数decorateInnerが返ってくる。
// クロージャにより関数decorateInnerはnm,fnを保持している。
var f1 = decorate('平均値', funcAvr);
var f2 = decorate('中央値', funcMed);
var targetArray = [750,3,1206,231];
console.log(f1(...targetArray));
console.log(f2(...targetArray));
タグ:JavaScript