Math.max() は、引数に渡された数値のうち最大のものを返す JavaScript の組み込み関数です。この関数は任意の数の引数を受け取るので、配列最大値を求めたい場合にはスプレッド構文で展開して渡す使い方が一般的です。しかし、引数の数が多すぎるとエラーになることがあります。
const numbers = Array.from({ length: 1000000 }, (_, i) => i);
// エラー: "Uncaught RangeError: Maximum call stack size exceeded"
Math.max(...numbers);この例では、Array.from() メソッドを使って 100 万個の数値を持つ配列を生成し、Math.max() に渡しています。しかし、引数が多すぎるためスタックオーバーフローが発生し、エラーがスローされています。
このような場合は、Math.max() のスプレッド構文で配列を渡す足す代わりに Array.prototype.reduce() メソッドを使って最大値を求めることができます。
const numbers = Array.from({ length: 1000000 }, (_, i) => i);
const max = numbers.reduce((acc, cur) => Math.max(acc, cur), -Infinity);
console.log(max); // => 999999