JavaScriptで配列の最小値と最大値を含む配列を返す方法
数値の配列が与えられたとき、その配列から最小値と最大値を取り出し、インデックス0に最小値、インデックス1に最大値が入った配列を返す関数を作成する方法を紹介します。
例として、次のような数値の配列を考えてみましょう。
const arr = [12, 54, 6, 23, 87, 4, 545, 7, 65, 18, 87, 8, 76];
この配列から最小値と最大値を取得し、[最小値, 最大値] の形式で新しい配列として返すのが目的です。
reduce()メソッドを使った実装
ここでは Array.prototype.reduce() メソッドを使用して、最小値と最大値を格納した配列を効率的に構築します。初期値として [Infinity, -Infinity] を設定することで、どのような数値の配列にも対応できるのがポイントです。
コード例
const arr = [12, 54, 6, 23, 87, 4, 545, 7, 65, 18, 87, 8, 76];
const minMax = (arr) => {
return arr.reduce((acc, val) => {
if (val < acc[0]) {
acc[0] = val;
}
if (val > acc[1]) {
acc[1] = val;
}
return acc;
}, [Infinity, -Infinity]);
};
console.log(minMax(arr));コードの解説
このコードの仕組みは以下のとおりです。
1. 初期値の設定
アキュムレータ(累積値)の初期値を [Infinity, -Infinity] とします。インデックス0には最小値候補として正の無限大、インデックス1には最大値候補として負の無限大を設定しています。
2. 各要素の比較
配列の各要素 val を走査しながら、現在の最小値候補より小さければ acc[0] を更新し、現在の最大値候補より大きければ acc[1] を更新します。
3. 結果の返却
すべての要素の走査が完了した時点で、acc には配列全体の最小値と最大値が格納されています。
実行結果
コンソールへの出力は以下のようになります。
[ 4, 545 ]
このように、配列内の最小値である 4 と最大値である 545 が、それぞれ正しい位置に格納された配列として返されます。
補足:Math.min / Math.max を使う代替案
スプレッド構文を使えば、より簡潔に記述することも可能です。
const minMax = (arr) => [Math.min(...arr), Math.max(...arr)];
ただし、要素数が非常に多い配列の場合、スプレッド構文は引数の数に上限があるため、reduce() を使った方法の方が安全です。用途に応じて使い分けるとよいでしょう。
-
JavaScriptで配列の先頭(0番目)の要素を削除して残りの要素を取得する方法
JavaScriptのライブラリunderscore.jsに含まれる_.rest()メソッドは、配列の先頭(0番目)の要素を取り除き、それ以外の残りの要素を返します。このメソッドは2つの引数を受け取ります。1つ目は対象となる配列、2つ目はインデックスです。2つ目の引数を指定すると、その位置以降の要素から抽出が開始されます。 構文 _.rest( array, index ); 例:先頭の1要素だけを削除する場合 次の例では、_.rest()メソッドを使って配列の0番目の要素を削除しています。このとき、2つ目の引数は指定していません。 <html> <body> &l
-
JavaScriptで配列の要素を同じ配列内に複製する方法
JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont