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

JavaScriptの配列で、指定した数値より上または下の要素数をカウントする方法

はじめに

JavaScriptでは、配列内の各要素が特定の基準値より「下」なのか「以上」なのかを一括で判定し、それぞれの件数を数えたいケースがあります。本記事では、reduce() メソッドを活用したシンプルで効率的な実装方法を解説します。

対象となるデータ

まず、次のような数値の配列を考えてみましょう。

const array = [54,54,65,73,43,78,54,54,76,3,23,78];

この配列に対して、指定した数値よりも小さい要素がいくつあるか、基準値以上の要素がいくつあるかをカウントする関数を作成します。たとえば基準値が 50 の場合、50未満の要素は 43・3・23 の 3つ、50以上の要素は残りの 9つとなります。

reduce() を使った実装例

この処理は、Array.prototype.reduce() を使うことで簡潔に書けます。各要素を走査しながら、基準値より小さければ「below」、そうでなければ「par」のカウンターを増やしていきます。

const array = [54,54,65,73,43,78,54,54,76,3,23,78];

const belowParNumbers = (arr, num) => {
    return arr.reduce((acc, val) => {
        const legend = ['par', 'below'];
        const isBelow = val < num;
        acc[legend[+isBelow]]++;
        return acc;
    }, {
        below: 0,
        par: 0
    });
};
console.log(belowParNumbers(array, 50));
console.log(belowParNumbers(array, 60));
console.log(belowParNumbers(array, 70));

コードのポイント

  • ブール値の数値変換+isBelow のように単項プラス演算子を使うと、true は 1 に、false は 0 に変換されます。
  • legend 配列による分岐:インデックス 0 が「par」、インデックス 1 が「below」に対応しているため、変換後の数値でそのままキーを選択できます。if 文を書かずに済むスマートなテクニックです。
  • 初期値の設定reduce() の第2引数に { below: 0, par: 0 } を渡すことで、累積オブジェクトとしてカウンターを用意しています。

出力結果

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

{ below: 3, par: 9 }
{ below: 7, par: 5 }
{ below: 8, par: 4 }

このように、基準値が 50・60・70 と変わるごとに、基準値を下回る要素数(below)と基準値以上の要素数(par)が正しくカウントされていることが確認できます。なお、ここでの「par」は基準値と一致する場合も含むため、実質的には「基準値以上」の要素数を表しています。

  1. JavaScriptで配列を「2倍関係」を満たすように再配置できるか判定する方法

    問題数値の配列 arr を第一引数(唯一の引数)として受け取るJavaScript関数を作成する必要があります。配列 arr の長さは必ず偶数であると保証されています。この関数は、すべての 0 <= i < arr.length / 2 に対して arr[2 * i + 1] = 2 * arr[2 * i] という条件を満たすように並べ替えられる場合にのみ true を返し、そうでなければ false を返す必要があります。たとえば、関数への入力が次の場合を考えてみましょう。const arr = [4, -2, 2, -4];このとき、期待される出力は次のとおりです。const

  2. 【JavaScript】ネストされた配列の全要素数(ディープカウント)を求める方法

    問題:ネストされた配列の全要素数を数える入れ子(ネスト)構造を持つ配列を受け取り、その中に存在するすべての要素の総数(ディープカウント)を返すJavaScript関数を作成します。入力const arr = [1, 2, [3, 4, [5]]];出力const output = 7;出力が7になるのは、第1階層に「1」「2」「[3, 4, [5]]」の3つ、第2階層に「3」「4」「[5]」の3つ、第3階層に「5」の1つの要素が存在し、入れ子の配列そのものも1つの要素としてカウントされるためです。すなわち 3 + 3 + 1 = 7 となります。サンプルコードconst arr = [1, 2