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

JavaScriptで指定した数より大きい・小さい配列要素の個数を数える方法

問題の概要

次のような数値の配列があるとします。

const array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9];

ここで求めたいのは、指定した基準値よりも「小さい要素」と「大きい要素」がそれぞれ何個ずつ含まれているかを数える関数です。

具体例

たとえば基準値が 5.25 の場合、それより小さい要素は次の5つです。

(3.1, 1, 2.2, 5.1, 2.1)

逆に、基準値より大きい要素は次の3つになります。

(6, 7.3, 9)

注意: 要素の値が基準値とちょうど等しい場合は、「大きい側(以上)」としてカウントするルールとします。

実装コード

それでは、実際に関数を実装してみましょう。

const array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9];
const countNumbers = (arr, num) => {
    return arr.reduce((acc, val) => {
        const legend = ['upper', 'lower'];
        const isBelow = val < num;
        acc[legend[+isBelow]]++;
        return acc;
    }, {
        lower: 0,
        upper: 0
    });
};
console.log(countNumbers(array, 5.25));
console.log(countNumbers(array, 7));
console.log(countNumbers(array, 1));

コードのポイント

この実装では Array.prototype.reduce() を活用し、配列を1回の走査だけで両方のカウントをまとめて取得しています。初期値として { lower: 0, upper: 0 } を持つオブジェクトを渡し、各要素ごとに val < num の判定結果をもとにカウント先を振り分けます。

特に注目すべきは const legend = ['upper', 'lower']; の部分です。真偽値 isBelow に単項プラス演算子(+)を適用すると、false0true1 に変換されます。そのため、legend[+isBelow] によって「基準値未満なら 'lower'」「基準値以上なら 'upper'」というキーが自動的に選択され、条件分岐を書かずに簡潔に処理できるのが特徴です。

実行結果

コンソールには以下のように出力されます。

{ lower: 5, upper: 3 }
{ lower: 6, upper: 2 }
{ lower: 0, upper: 8 }
  • 5.25 を指定した場合: 小さい要素が5個、大きい要素が3個
  • 7 を指定した場合: 小さい要素が6個、大きい(7を含む)要素が2個
  • 1 を指定した場合: 小さい要素は0個で、すべての要素が「大きい側」に分類される

このように reduce() を使うことで、フィルタ処理を複数回行う必要がなく、効率的かつ読みやすいコードで実現できます。

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

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

  2. C++で配列要素と指定した数値の平均の出現回数をカウントする方法

    問題の概要 整数要素を含む配列 arr[] と整数 num が与えられます。この問題の目標は、各要素 arr[i] と num の平均を求め、その平均値が元の配列 arr[] 内に何回出現するかをカウントして出力することです。 たとえば、配列 arr[] が [5, 2, 3]、num が 2 の場合、平均値は [3, 2, 2] となり、それぞれが arr[] 内に出現する回数は [1, 1, 1] になります。 入力例 1 arr[] = { 1, 6, 4, 3, 6, 4 }num = 2 出力例 1 1 2 1 0 2 1 ゼロ以外の出現回数を持つ要素の合計:5 説明 num