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」とする点に注意してください。要素数をそのまま使う、あるいは誤って半分にしてしまうと、正しい平均値になりません。
-
JavaScriptでPriorityQueueから要素を取り出す方法(dequeue関数の実装)
優先度付きキュー(Priority Queue)から要素を取り出す(デキューする)ということは、最も優先度の高い要素を削除することを意味します。 この実装では、最も優先度の高い要素を配列の末尾に格納しています。そのため、JavaScriptのpop()メソッドを使えば、末尾の要素を簡単に取り出すことができます。 つまり、dequeue関数は次のように実装できます。 Example dequeue() { // キューが空かどうかをチェック if (this.isEmpty()) { console.log(Queue Underflow!); r
-
JavaScriptでリンクリストから要素を削除する方法
リンクリストから要素を削除する基本の考え方 リンクリスト(連結リスト)から要素を削除する処理は非常にシンプルです。削除したいノードへの参照を失う(参照を切り離す)だけで実現できます。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。 ケース1:先頭(ヘッド)から削除する場合 先頭の要素を削除する場合は、head = head.next と代入するだけでOKです。これにより最初のノードへの参照が失われ、headは2番目のノードを指すようになります。 ケース2:末尾(テール)から削除する場合 末尾の要素を削除する場合は、最後から2番目のノードの node.ne