0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[JavaScript ] 最大値取得時の注意点

Posted at

はじめに

js で最大値取得時に注意する点の備忘録です。(最小値も同様)

詳細

const array = [1, 3, 5, 4, 2]
Math.max(...array)  // 5

// 配列を与えると NaN を返すので、上記のようにスプレッド構文を使用
Math.max(array)  // NaN

MDN web docs: Math.max()から引用↓

しかし、要素の数が多い大規模な配列では、スプレッド構文 (...) と apply のどちらも、失敗するか誤った値を返す可能性があります。なぜなら、配列の要素を関数の引数として渡そうとしているからです。

MDN web docs: Function.prototype.apply()から引用↓

しかし注意してください。この方法で apply を使う場合、JavaScript エンジンの引数の長さ上限を超えてしまう危険があります。
多すぎる (おおよそ数万個以上だと思って下さい) 引数を与えた結果は、その上限が特に決まっていない (本当に任意の巨大なデータのかたまりに対してさえ) ためエンジンによって (JavaScriptCore ライブラリでは引数の上限は65536であるとハードコーディングされています) 異なります。例外を投げるエンジンも存在します。
さらに酷い場合では、関数へ実際に渡す引数の数を勝手に制限するものもあります

解決策:reduce()を使用

const getBig = function (a, b) {return Math.max(a, b);}
let array = [5, 2, 3, 1, 10];
let max = array.reduce(getBig); // => 10

ちなみに python の場合

maxValue = max(array)
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?