JavaScript標準関数Math.maxで配列の最大値を取得する方法とその罠
JavaScript標準関数にはC++の max_element のような「配列の最大値を返す」関数は存在しません(しないよね?).
よってMath.max()を使います.
Math.max
は与えられた引数から最大の数を返すので,
配列を引数に分解してやれば良いわけです.
つまり
> Math.max(...[])
-Infinity
> Math.max(...[], -1)
-1
> Math.max(...[1, 2, 3])
3
みたいにやるわけですね.
空配列を適用したら-Infinity
になるので最低値を次の引数に指定しましょう.
ただ,
この方法には罠があって,
配列にスプレッド演算子を付けるのを忘れた時に値が0
やNaN
になります.
> Math.max([])
0
> Math.max([], -1)
0
> Math.max([1, 2, 3])
NaN
これはMath.max
は引数を全て数値に変換してから比較を行い,
Number([]) === 0
であることに由来します.
これはエラーログなどを吐かないので数十分溶かしました.