JavaScriptで各要素と直前の要素の平均を計算する方法
数値の配列が与えられたとき、各要素とその直前の要素(先行する要素)の平均値を格納した新しい配列を返す関数を作成することを考えてみましょう。
ただし、最初の要素には先行する要素が存在しないため、その場合は要素自体をそのまま返すものとします。
解決のアプローチ
この問題は Array.prototype.map() メソッドを使うことで、簡潔かつ読みやすく解決できます。map() は元の配列の各要素を順番に処理し、コールバック関数が返した値から新しい配列を生成してくれるため、このような「対応する位置ごとの変換」に最適です。
コード例
実際のコードは以下のようになります。
const arr = [3, 5, 7, 8, 3, 5, 7, 4, 2, 8, 4, 2, 1];
const consecutiveAverage = arr => {
return arr.map((el, ind, array) => {
const first = (array[ind-1] || 0);
const second = (1 + !!ind);
return ((el + first) / second);
});
};
console.log(consecutiveAverage(arr));出力結果
コンソールには次のように出力されます。
[
3, 4, 6, 7.5, 5.5, 4,
6, 5.5, 3, 5, 6, 3,
1.5
]コードの解説
このコードのポイントは、コールバック関数内の2つの変数にあります。
first:array[ind-1] || 0 によって、直前の要素を取得しています。インデックスが 0 の場合、array[-1] は undefined となるため、論理和演算子(||)によりデフォルト値の 0 が代入されます。
second:1 + !!ind は除算する要素の個数を表しています。!!ind はインデックスが 0 のとき false(つまり 0)に、それ以外では true(つまり 1)になります。したがって、最初の要素は 1 で割られるためそのままの値が返され、それ以外の要素は 2 で割られて直前の要素との平均が計算されます。
このように、条件分岐を書かずに論理演算の性質を利用することで、シンプルでエレガントな実装が可能になります。
-
JavaScriptでキューに要素を追加する(エンキュー)方法
キューへの要素追加(エンキュー)とは キューに要素を追加すること(エンキュー)とは、コンテナ配列の末尾に新しい要素を加える操作です。本記事では、配列の末尾をキューの「尾部(tail)」として扱い、すべての挿入操作をこの末尾に対して行います。つまり、先入れ先出し(FIFO)の構造において、新しく入ってくる要素は常に列の最後尾へ並ぶことになります。 この考え方に基づけば、enqueue 関数は次のようにシンプルに実装できます。 実装例:enqueue関数 enqueue(element) { // キューが満杯かどうかをチェック if (this.isFull()) {
-
JavaScriptで配列の平均値を計算する方法
JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia