最近、小さなケースでMath.max.applyのような使い方に遭遇したのですが、滅多にないことで、とても興味深く感じました。
Math.max
構文 Math.max(n1,n2,n3,...,nX)
戻り値:max() メソッドは、指定された引数のうち大きな値を持つ数値を返します。
var a = Math.max(1,2,3,4);
console.log(a); //4
しかし、データが配列に配置されている場合は、この方法を呼び出すことはできません。そこでapplyメソッドの出番です
Math.max.apply
apply() メソッドは関数を呼び出します。これは単に関数をコールする方法として理解されていますが、関数を指す this を変更したり、関数の引数を指定した配列に置き換えたりすることができます。
文法:fun.apply(thisArg, [argsArray])
- this引数:fun関数実行時に指定される thisの値はNULLでも構いません。
- argsArray: 渡される値。配列に含まれている必要があります。
ここで追加するのは、配列形式の値を渡しますが、配列はどのような型のパラメータで、戻り値はどのような型かというと、入力配列はここでは文字列ですが、数値はフェッチの値です。例えば、'abc'を渡すと、戻り値は'abc'になります。
戻り値:apply() メソッドの戻り値は関数の戻り値です。
var arr = [1, 66, 3, 99, 4];
var max = Math.max.apply(Math, arr);
var min = Math.min.apply(Math, arr);
console.log(max); //99
console.log(min); //1
Math.max.apply拡張ケース
ここでは別の応用例として、ナンバリングの自動生成について説明します。
説明: json配列のデータ。
let maxBookCode = ()=>{
let arr = [];
//json配列を繰り返し処理し、オブジェクトのidをすべて空のarr配列に格納する。
data.forEach((item)=>{
arr.push(item.id);
});
//最後に、最大のid値を持つ番号を返す。
return Math.max.apply(null,arr);
}
maxBookCode() + 1の外部呼び出しは、自動的に数を生成し、自己インクリメントします。





