「どっちが小さい?」「どっちが大きい?」をJavaScriptで一瞬で解決!Math.minとMath.maxの魔法 ✨
Web制作・開発の世界へようこそ!JavaScriptを触り始めたばかりの皆さん、こんにちは!😊
「この数字とあの数字、どっちが小さいんだろう?」
「たくさんの数字の中で、一番大きいのはどれかな?」
日常生活でも、お買い物の時につい値段を比べてしまったり、チームで作業する時に「一番早く終わったのは誰?」なんて話題になったりしますよね。
実は、JavaScriptにも、そんな「一番小さい数」「一番大きい数」を簡単に見つけ出すための、とっておきの道具があるんです。それが、今日ご紹介する `Math.min()` と `Math.max()` という、とっても賢いメソッド(道具箱に入ってる便利な機能のことだと思ってください!)です。
今回は、この `Math.min()` と `Math.max()` がどうやって動くのか、そして、皆さんがよく使う「配列」というデータの集まりと組み合わせると、どんな魔法が使えるのかを、身近な例え話を交えながら、とーっても優しく解説していきますね。
「え、難しそう…」なんて思わないでくださいね!大丈夫、私がしっかりサポートしますから!👍
Math.min() と Math.max() って、一体どんな魔法?
まずは、この二つのメソッドがどんなものなのか、イメージを掴んでいきましょう!
Math.min():みんなの「一番小さい」を見つける名探偵 🕵️♀️
`Math.min()` は、たくさんの数字の中から「一番小さい数」を見つけ出すのが得意な名探偵です。
まるで、たくさんのリンゴの中から一番小さなリンゴを探し出すようなイメージですね。
例えば、3つのリンゴがあって、それぞれの重さが 100g、150g、80g だとします。
`Math.min()` にこの3つの重さを教えてあげると、「一番小さいのは 80g のリンゴだよ!」と教えてくれます。
Math.max():みんなの「一番大きい」を見つける王様 👑
一方、`Math.max()` は、たくさんの数字の中から「一番大きい数」を見つけ出すのが得意な王様です。
たくさんのバナナの中から一番長いバナナを探し出すようなイメージでしょうか。
もし、バナナの長さが 15cm、20cm、18cm だったとしたら、`Math.max()` に教えてあげると、「一番長いのは 20cm のバナナだよ!」と教えてくれるでしょう。
実際にJavaScriptで使ってみよう!
言葉で説明するよりも、実際にコードを見てみるのが一番!
まずは、この二つのメソッドに、いくつかの数字を渡して、どうなるか見てみましょう。
// Math.min() の例:一番小さい数を見つけよう!
let smallestNumber = Math.min(10, 5, 20, 8);
console.log(‘一番小さい数:’, smallestNumber); // 出力: 一番小さい数: 5
// Math.max() の例:一番大きい数を見つけよう!
let largestNumber = Math.max(10, 5, 20, 8);
console.log(‘一番大きい数:’, largestNumber); // 出力: 一番大きい数: 20
// 負の数でも大丈夫!
let smallestNegative = Math.min(-5, -1, -10);
console.log(‘負の数での最小値:’, smallestNegative); // 出力: 負の数での最小値: -10
let largestNegative = Math.max(-5, -1, -10);
console.log(‘負の数での最大値:’, largestNegative); // 出力: 負の数での最大値: -1
// 少数(浮動小数点数)でもOK!
let smallestFloat = Math.min(3.14, 2.71, 1.618);
console.log(‘少数の最小値:’, smallestFloat); // 出力: 少数の最小値: 2.71
let largestFloat = Math.max(3.14, 2.71, 1.618);
console.log(‘少数の最大値:’, largestFloat); // 出力: 少数の最大値: 3.14
どうです?とってもシンプルで分かりやすいですよね!
`Math.min()` や `Math.max()` のカッコの中に、探したい数字をカンマ(`,`)で区切って並べてあげるだけで、結果を返してくれるんです。
勘違いしやすい?引数の数について
ここで、ちょっとだけ注意点。
`Math.min()` と `Math.max()` は、複数の引数(カッコの中に入れる値のこと)を受け取るように設計されています。
例えば、
// これはOK!引数が2つ
Math.min(10, 20); // 10を返します
Math.max(10, 20); // 20を返します
でも、もし、引数が1つだけだったり、引数が全くない場合はどうなるのでしょうか?
// 引数が1つの場合
let oneNumberMin = Math.min(50);
console.log(‘引数1つのMath.min:’, oneNumberMin); // 出力: 引数1つのMath.min: 50
let oneNumberMax = Math.max(50);
console.log(‘引数1つのMath.max:’, oneNumberMax); // 出力: 引数1つのMath.max: 50
引数が1つの場合は、そのままその数字が返ってきます。これは、まあ、想像できますよね。
では、引数が全くない場合は…?
// 引数がない場合
let noArgsMin = Math.min();
console.log(‘引数なしのMath.min:’, noArgsMin); // 出力: 引数なしのMath.min: Infinity
let noArgsMax = Math.max();
console.log(‘引数なしのMath.max:’, noArgsMax); // 出力: 引数なしのMath.max: -Infinity
あれれ?なんか不思議な結果になりましたね!
`Math.min()` は `Infinity` (無限大)、`Math.max()` は `-Infinity` (マイナス無限大) を返しました。
これは、JavaScriptの内部的な仕組みによるものなのですが、初学者の方にとっては「なんで?」と混乱しやすいポイントです。
でも、安心してください!ほとんどの場合、私たちは「比較したい数字」をちゃんと渡しますから、この「引数なし」のケースに遭遇することは、まずありません。
「へぇ、そういうことがあるんだな」くらいに覚えておけば大丈夫です!👍
魔法をもっと強力に!配列展開演算子 (…) との組み合わせ!
さて、ここからが本番!JavaScriptで開発をしていると、数値を直接書くよりも、配列として数値の集まりを扱うことが圧倒的に多いんです。
例えば、商品の価格リストや、センサーから取得した温度データなどが配列で与えられる、といった場面です。
// 商品の価格リスト(配列)
let prices = [1200, 850, 2500, 500];
// チームメンバーの作業時間(配列)
let workHours = [3.5, 4.0, 2.5, 3.0];
さて、この `prices` 配列の中から一番安い価格を、`workHours` 配列から一番作業時間が短いメンバーを見つけたい!と思ったときに、どうすれば良いでしょう?
ここで登場するのが、JavaScriptの「配列展開演算子(spread syntax)」と呼ばれる、とっても便利な `…` です!
この `…` は、配列の中身を「バラバラにして」くれる魔法の呪文なんです。
例えば、`[1, 2, 3]` という配列があったとして、`…[1, 2, 3]` と書くと、それは `1, 2, 3` と、バラバラになった状態になるんです。
この魔法を `Math.min()` や `Math.max()` と組み合わせると…?
let prices = [1200, 850, 2500, 500];
let workHours = [3.5, 4.0, 2.5, 3.0];
// 配列展開演算子 (…) を使って、配列の中身を Math.min/max に渡す!
// 一番安い価格を見つける
let cheapestPrice = Math.min(…prices);
console.log(‘一番安い価格:’, cheapestPrice); // 出力: 一番安い価格: 500
// 一番作業時間が短いメンバーを見つける
let shortestWorkTime = Math.min(…workHours);
console.log(‘一番作業時間が短い時間:’, shortestWorkTime); // 出力: 一番作業時間が短い時間: 2.5
// 一番高い価格を見つける
let mostExpensivePrice = Math.max(…prices);
console.log(‘一番高い価格:’, mostExpensivePrice); // 出力: 一番高い価格: 2500
// 一番作業時間が長いメンバーを見つける
let longestWorkTime = Math.max(…workHours);
console.log(‘一番作業時間が長い時間:’, longestWorkTime); // 出力: 一番作業時間が長い時間: 4
やったー!これで、配列に入ったたくさんの数値の中から、最小値や最大値を一瞬で取得できるようになりました!🎉
この `…` 演算子、本当に便利なので、ぜひ覚えておいてくださいね。
まるで、宝箱(配列)から、一番キラキラ光る宝石(最小値/最大値)を取り出すような感覚です!
浮動小数点数(少数)の落とし穴? Math.min/max では大丈夫!
JavaScriptの数値計算で、初心者がつまずきやすいポイントの一つに「浮動小数点数(少数)の計算誤差」があります。
例えば、 `0.1 + 0.2` を計算すると、期待される `0.3` ではなく、 `0.30000000000000004` のような、ちょっとだけズレた結果になることがあります。これは、コンピューターが少数(浮動小数点数)を二進数で表現する際に発生する、避けられない現象なんです。
でも、ご安心ください! `Math.min()` と `Math.max()` を使う際には、この浮動小数点数の誤差を気にする必要はほとんどありません。
なぜなら、これらのメソッドは「比較」をしているだけで、複雑な足し算や引き算をしているわけではないからです。
「この数とこの数、どっちが小さい(大きい)?」という判断は、たとえわずかな誤差があったとしても、正確に行われるように設計されています。
let floatArray = [0.1 + 0.2, 0.3, 0.1 + 0.1 + 0.1];
// floatArray は [0.30000000000000004, 0.3, 0.3] のようになっているかもしれません
let minFloat = Math.min(…floatArray);
console.log(‘浮動小数点数の最小値:’, minFloat); // 期待通り 0.3 に近い値が返ります
let maxFloat = Math.max(…floatArray);
console.log(‘浮動小数点数の最大値:’, maxFloat); // 期待通り 0.30000000000000004 のような値が返ります
もちろん、計算結果が「厳密に一致しない」という事実は変わりませんが、`Math.min()` や `Math.max()` で「最小」「最大」を求めるという目的においては、これらの誤差が問題になることは、まずありません。
「少数ってちょっと怖い…」と思っていた皆さんも、これでもう大丈夫!😊
まとめ:Math.minとMath.maxで、あなたのコードもスッキリ!
今日のまとめです!
- `Math.min(数値1, 数値2, …)`:渡された数値の中から一番小さい数を返します。
- `Math.max(数値1, 数値2, …)`:渡された数値の中から一番大きい数を返します。
- 配列の最小値・最大値を知りたいときは、配列展開演算子 `…` を使うと、とってもスマートに書けます!
- `Math.min(…配列)`
- `Math.max(…配列)`
- 浮動小数点数の計算誤差はありますが、`Math.min()` や `Math.max()` での比較においては、ほとんど気にする必要はありません。
`Math.min()` と `Math.max()` は、コードをより簡潔に、そして読みやすくしてくれる、まさに「魔法」のようなメソッドです。
ぜひ、皆さんのWeb制作・開発の現場で、どんどん活用してみてくださいね!
「こんな風に使うと便利だよ!」「こんな疑問があるんだけど…」など、もしあれば、ぜひコメントで教えてください!一緒にJavaScriptの世界を深掘りしていきましょう!✨

コメント