JavaScriptで可変長の引数を取るメソッドではapply()を使う

備忘録

配列の最小値を取得したいときMath.mix()を使用したが、NaNが返ってきた。
どうやらapply()を使う必要があったらしい。

  const arr = [ '1', '4', '6', '3' ];
  console.log(Math.min(arr));             // NaN
  console.log(Math.min.apply(null, arr)); // 1

applyとは何か

apply() メソッドは与えられた this 参照値と、配列 (もしくは配列風のオブジェクト) の形で与えられた引数を用いて関数を呼び出します。
参考:MDN - Function.prototype.apply()

apply()を使用することで、配列(または配列風のオブジェクト)を引数として渡すことができるらしい。

挙動の確認

  const arr = [ '1', '4', '6', '3' ];
  console.log(Math.min(arr));             // NaN
  console.log(Math.min.apply(null, arr)); // 1

  console.log(Math.max(arr));             // NaN
  console.log(Math.max.apply(null, arr)); // 6

  console.log(Math.min( '1', '4', '6', '3' )) // 1
  console.log(Math.max( '1', '4', '6', '3' )) // 6

  console.log(Math.min(...arr))               // 1
  console.log(Math.max(...arr))               // 6

まとめ:可変長の引数を受ける関数はapply()を使って配列(または配列風のオブジェクト)を引数に渡そう。