JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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() を使った方法の方が安全です。用途に応じて使い分けるとよいでしょう。

  1. JavaScriptで配列の先頭(0番目)の要素を削除して残りの要素を取得する方法

    JavaScriptのライブラリunderscore.jsに含まれる_.rest()メソッドは、配列の先頭(0番目)の要素を取り除き、それ以外の残りの要素を返します。このメソッドは2つの引数を受け取ります。1つ目は対象となる配列、2つ目はインデックスです。2つ目の引数を指定すると、その位置以降の要素から抽出が開始されます。 構文 _.rest( array, index ); 例:先頭の1要素だけを削除する場合 次の例では、_.rest()メソッドを使って配列の0番目の要素を削除しています。このとき、2つ目の引数は指定していません。 <html> <body> &l

  2. JavaScriptで配列の要素を同じ配列内に複製する方法

    JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont