blog

JavascriptのMath.maxとMath.max.applyの違いと使い方

最近、ちょっとした案件をこなしていたところ、このような使い方に出くわしました。滅多に遭遇しない使い方で、なかなか面白いと感じたので記録しておきます。 ただし、データが配列に配置されている場合は、これを...

Jul 21, 2020 · 2 min. read
シェア

最近、小さなケースで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の外部呼び出しは、自動的に数を生成し、自己インクリメントします。

Read next

Observer パターンの PHP デザインパターン

アクションは observed インターフェイスを実装しています。 まず register メソッドを実装し、オブザーバを渡して配列に詰め、notify メソッドを実装します。 ここでは3つのメソッドが定義されています。

Jul 21, 2020 · 4 min read