2020年03月31日

JavaScript 高階関数

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
posted by Hiro at 23:30| Comment(0) | プログラム

JavaScript 論理演算

JavaScript 論理演算
// JavaScript 論理演算

with(console) {
// Booleanへの変換
log("◇ Booleanへの変換 1");
log(Boolean(0)); // 0のとき false となる
log(Boolean(5)); // 0以外のとき true となる
log(Boolean(-22.33)); // true

log("◇ Booleanへの変換 2");
log(Boolean(null)); // null は false
log(Boolean(undefined)); // undefined は false
log(Boolean(NaN)); // NaN は false
log(Boolean("")); // 空文字 は false
log(Boolean("任意の文字")); // 任意の文字 は true
log(Boolean(" ")); // スペース文字 は true
log(Boolean("0")); // 文字列"0" は true (falseにはならない)

//log("◇ alertの戻り値");
//log(alert("")); // alertの戻り値はundefined

// 論理演算子は、オペランドを変換してから評価するが、変換した値が返るわけではない
var res1 = true && "評価対象の文字列";
log(res1); // 「評価対象の文字列」を出力する

//||演算子は、左辺値をBoolean型として評価し、trueなら左辺値を、そうでないなら右辺値を返します。
log("◇ ||演算子");
//||演算子は最初の真(true)を探す
log(null || undefined || 0 || 5 || 20); // 5
log(null || undefined || "" || "壱" || "弐"); // 壱

//&&演算子は、左辺値をBoolean型として評価し、trueなら右辺値を、そうでないなら左辺値を返します。
log("◇ &&演算子");
//&&演算子は最初の偽(false)を探す
log(20 && 5 && 0 && undefined && null); // 0
log("壱" && "弐" && "" && undefined && null); // ブランク
}
タグ:JavaScript
posted by Hiro at 23:28| Comment(0) | プログラム

JavaScript 演算子の基本

JavaScript 演算子の基本
// JavaScript 演算子

with(console) {
// 文字列演算子
log("apple" + "banana");
// 条件(三項)演算子
log(-5<10 ? "AAA" : "BBB");
// カンマ演算子
var val = 0;
res = (++val, val += 10, val * 2); // すべて評価し、一番右の結果を返す
log(res);

myAry = [10, 20 , '第三', '第四'];
myObj = {name:"Tato", age:10, hobby: "soccer"};

//in 演算子 (配列)
log (5 in myAry) // false

//in 演算子 (オブジェクト)
log ('hobby' in myObj) // true

// 配列 for-inで配列番号を列挙
for(var cur in myAry){
log(' > ' + cur);
}
// 配列 for-ofで要素を列挙
for(var cur of myAry){
log(' > ' + cur);
}
// オブジェクト for-inでプロパティ名を列挙
for(var cur in myObj){
log(' > ' + cur + ':' + myObj[cur]);
}
//for(var cur of myObj){ // エラー:myObj is not iterable
// log(cur);
//}

// typeof演算子 型を指す文字列を返す
log(typeof myAry); // object
log(typeof myObj); // object
log(typeof myfunc); // function

// typeof演算子 オブジェクトの種類が一致するか
log(myAry instanceof Array); // true
log(myObj instanceof Object); // true
log(myfunc instanceof Object); // true

//delete 演算子
delete myObj.hobby; //プロパティ削除
log(myObj); // {name: "Tato", age: 10}

//deleteは暗黙的に宣言された変数だけを削除できる(var 宣言したものは削除できない)
resdel = delete myObj; //オブジェクト削除
//log(myObj); // エラー:myObj is not defined
log(resdel); // 削除が成功するとtrueを返す

delete myAry[2] // 配列の要素を削除すると要素が undefined になる
log(myAry[2]);

// 展開演算子
var ar1 = [100, 200, 300];
var ar2 = [...ar1, 400, 500];
log(ar2);
myfunc(...ar1);
}

function myfunc(arg1, arg2, arg3) {
console.log(arg1 + arg2 + arg3);
}
タグ:JavaScript
posted by Hiro at 23:19| Comment(0) | プログラム