JavaScriptやTypeScriptでAverage(平均)を計算する方法

JavaScript

JavaScriptやTypeScriptでAverage(平均)を計算したい!

業務でNodeを使ってツールを作成した際に平均を取得したい時がありましたのでまとめておきます。

フロントエンドでのJavaScriptTypeScriptの処理でも同様に使用できるので、ご活用ください。

  • 合計を計算したい!
  • 中央値を取得したい!

という場合は、こちらに記事にまとめておきましたのでこちらを参照してください!

平均とは?

普段の生活でも使うので特に説明不要かと思いますが、個々の値を全て足し合わせてその個数で割った値のことです。

Reduceを使用して平均を出す方法

オススメなReduceを使用して平均を出す方法を2パターン紹介していきます。

※計算結果はMath.floorで切り捨てているので、実際にコピペする時はそこら辺問題ないかよく検討してからご使用ください。

reduceを使用する方法1

こちらの記事で使用したsum(合計)を利用して平均を求める方法です!

まず全部合計してから、単純に数で割る方法です!

JavaScript

const sum = (numbers, initialValue = 0) => numbers.reduce(
    (accumulator, currentValue) => accumulator + currentValue,
    initialValue
)
const average = (numbers) => Math.floor(sum(numbers) / numbers.length)

console.log(average([100, 200, 300, 400, 500]))
console.log(average([100, 200, 300, 400, 500, 600]))
console.log(average([600, 600, 100, 200, 300, 400, 500]))
% node index.js 
300
350
385

TypeScript

const sum = (numbers: number[], initialValue: number = 0) => numbers.reduce(
  (accumulator: number, currentValue: number) => accumulator + currentValue,
  initialValue
)

const average = (numbers: number[]) => Math.floor(sum(numbers) / numbers.length)

console.log(average([100, 200, 300, 400, 500]))
console.log(average([100, 200, 300, 400, 500, 600]))
console.log(average([600, 600, 100, 200, 300, 400, 500]))
% ts-node index.ts
300
350
385

reduceを使用する方法2

こちらはちょっと特殊?な平均の出し方ですが、こちらの方が効率的になりそうな気はします。

個々の値を数で割ってから足し込む方法です!

小学校の算数レベル?ぐらいではあると思うので使えるようにしておきたいですね!

まず勘違いしやすいので気をつけたいのがここ。

accumulator + currentValue / length

計算の順番がこうなているので注意してください。

accumulator + ( currentValue / length )

そして、平均の計算でlengthを使用するため、4つ目の引数も利用しています。

The reducer function takes four arguments:
1. Accumulator
2. Current Value
3. Current Index
4. Source Array

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

JavaScript

const average = numbers => {
    const reducer = (accumulator, currentValue, _, { length }) => accumulator + currentValue / length
    return Math.floor(numbers.reduce(reducer, 0))
}

console.log(average([100, 200, 300, 400, 500]))
console.log(average([100, 200, 300, 400, 500, 600]))
console.log(average([600, 600, 100, 200, 300, 400, 500]))
 % node index.js
300
350
385

TypeScript

const average = (numbers: number[]) => {
  const reducer = (accumulator: number, currentValue: number, _: number, { length }: { length: number }) => accumulator + currentValue / length
  return Math.floor(numbers.reduce(reducer, 0))
}

console.log(average([100, 200, 300, 400, 500]))
console.log(average([100, 200, 300, 400, 500, 600]))
console.log(average([600, 600, 100, 200, 300, 400, 500]))
% ts-node index.ts
300
350
385

for, forEachを使用して平均を出す方法

おまけではありますが、for, forEachを使用した方法も記載しておきます。

for文を使用する方法

サンプル1

こちらは全部合計してから、単純に数で割る方法です!

const numbers = [100, 200, 300, 400, 500]

let total = 0
for (let i = 0; i < numbers.length; i++) {
  total += numbers[i]
}

const average = total / numbers.length

// 300
console.log(average)

サンプル2

こちらは個々の値を数で割ってから足し込む方法です!

const numbers = [100, 200, 300, 400, 500]

let average = 0
for (let i = 0; i < numbers.length; i++) {
  average += numbers[i] / numbers.length
}

// 300
console.log(average)

forEachを使用する方法

サンプル1

こちらは全部合計してから、単純に数で割る方法です!

const numbers = [100, 200, 300, 400, 500]

let total = 0
numbers.forEach(num => total += num)
const average = total / numbers.length

// 300
console.log(average)

サンプル2

こちらは個々の値を数で割ってから足し込む方法です!

const numbers = [100, 200, 300, 400, 500]

let average = 0
numbers.forEach(num => average += num / numbers.length)

// 300
console.log(average)

まとめ

今回は、JavaScriptやTypeScriptでAverage(平均)を計算する方法について纏めました!

何年かエンジニアをやってれば何回かはこの平均を求める処理を書くことになるのですが、JavaScriptTypeScriptでコピペでそのまま使えるような気に入った物がネット上になかったため纏めておきました!

もし書き方など気に入りましたら、コピペで使ってください!

オススメの関連商品

Note一覧

コメント

タイトルとURLをコピーしました