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

JavaScriptで最大値・最小値を除外した平均値を計算する方法

数値の配列を受け取り、その要素のうち最大値と最小値を除外した平均値を返すJavaScript関数を作成する方法を解説します。

アプローチ

Array.prototype.reduce() メソッドを使えば、配列を一度だけ走査しながら「合計値・最小値・最大値」を同時に求められます。最後に合計値から最小値と最大値を引き、残りの要素数で割ることで、除外後の平均値を効率的に計算できます。

コード例

const arr = [5, 3, 5, 6, 12, 5, 65, 3, 2];

const findExcludedAverage = arr => {
  // reduceで合計・最小値・最大値を一括取得
  const creds = arr.reduce((acc, val) => {
    let { min, max, sum } = acc;
    sum += val;
    if (val > max) {
      max = val;
    }
    if (val < min) {
      min = val;
    }
    return { min, max, sum };
  }, {
    min: Infinity,
    max: -Infinity,
    sum: 0
  });

  const { max, min, sum } = creds;

  // 合計から最小値と最大値を除き、残りの要素数で割る
  return (sum - min - max) / (arr.length - 2);
};

console.log(findExcludedAverage(arr));

出力結果

5.571428571428571

コードの解説

  • 初期値の設定: min には Infinity、max には -Infinity を設定することで、配列にどのような数値が含まれていても正しく比較できます。
  • reduce処理: 各要素を合計に加算しながら、条件に応じて最小値・最大値を更新していきます。
  • 平均の計算: 合計値から最小値と最大値を引き、要素数から2を引いた値(除外後の要素数)で割ります。

この例では、合計106から最小値2と最大値65を除いた39を、残り7個の要素で割るため、約5.57という結果が得られます。

なお、除外後の平均を正しく求めるには、除数を「要素数 − 2」とする点に注意してください。要素数をそのまま使う、あるいは誤って半分にしてしまうと、正しい平均値になりません。

  1. JavaScriptでPriorityQueueから要素を取り出す方法(dequeue関数の実装)

    優先度付きキュー(Priority Queue)から要素を取り出す(デキューする)ということは、最も優先度の高い要素を削除することを意味します。 この実装では、最も優先度の高い要素を配列の末尾に格納しています。そのため、JavaScriptのpop()メソッドを使えば、末尾の要素を簡単に取り出すことができます。 つまり、dequeue関数は次のように実装できます。 Example dequeue() { // キューが空かどうかをチェック if (this.isEmpty()) { console.log(Queue Underflow!); r

  2. JavaScriptでリンクリストから要素を削除する方法

    リンクリストから要素を削除する基本の考え方 リンクリスト(連結リスト)から要素を削除する処理は非常にシンプルです。削除したいノードへの参照を失う(参照を切り離す)だけで実現できます。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。 ケース1:先頭(ヘッド)から削除する場合 先頭の要素を削除する場合は、head = head.next と代入するだけでOKです。これにより最初のノードへの参照が失われ、headは2番目のノードを指すようになります。 ケース2:末尾(テール)から削除する場合 末尾の要素を削除する場合は、最後から2番目のノードの node.ne