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

JavaScriptで配列内の各データ型の頻度をMapとして返す方法

本記事では、number・string・objectなど、さまざまなデータ型の要素が混在する配列を受け取り、それぞれのデータ型が出現した回数(頻度)をMapオブジェクトとして返すJavaScript関数の作成方法を解説します。

まずは、処理対象となるサンプル配列を見てみましょう。

const arr = [23, 'df', undefined, null, 12, {
    name: 'Rajesh'
}, [2, 4, 7], 'dfd', null, Symbol('*'), 8];

この配列には数値、文字列、undefined、null、オブジェクト、配列、Symbolと多様な型が含まれています。

サンプルコード

以下は、reduce()メソッドとtypeof演算子を組み合わせて、各データ型の頻度をMapに集計するコード例です。

const arr = [23, 'df', undefined, null, 12, {
    name: 'Rajesh'
}, [2, 4, 7], 'dfd', null, Symbol('*'), 8];

const countDataTypes = arr => {
    return arr.reduce((acc, val) => {
        const dataType = typeof val;
        if(acc.has(dataType)){
            acc.set(dataType, acc.get(dataType) + 1);
        }else{
            acc.set(dataType, 1);
        };
        return acc;
    }, new Map());
};

console.log(countDataTypes(arr));

コードのポイント

この実装では、初期値として新しいMapオブジェクトをreduce()に渡し、配列の各要素に対してtypeofでデータ型を判定しています。Mapにその型のキーがすでに存在すればカウントを1増やし、存在しなければ新しく1として登録します。これにより、すべての要素を一度の走査で効率よく集計できます。

なお、null・配列・オブジェクトはいずれもtypeofでは「object」に分類される点に注意してください。より厳密に区別したい場合は、Array.isArray()val === nullによる判定を組み合わせるとよいでしょう。

実行結果

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

Map(5) {
    'number' => 3,
    'string' => 2,
    'undefined' => 1,
    'object' => 4,
    'symbol' => 1
}

このように、Mapのキーにデータ型名、値に出現回数が格納され、配列内の型構成をひと目で把握できるようになります。データの品質チェックや入力値の検証など、さまざまな場面で応用できるテクニックです。

  1. JavaScriptで配列の要素をデータ型ごとにグループ化する方法

    はじめにJavaScriptでは、数値・文字列・真偽値など異なるデータ型が混在する配列を扱う場面があります。本記事では、そのような配列を受け取り、「データ型名をキー」「その型に属する要素の配列を値」とするオブジェクトを返す関数の実装方法を解説します。問題の概要混合データ型の配列を引数として受け取り、各要素をtypeof演算子で判定して、同じデータ型同士をまとめたオブジェクトを返す関数を作成します。実装コード { const res = {}; for(let i = 0; i < arr.length; i++){ const el = arr[i];

  2. Python・Pandasでインデックスのデータを表す配列を取得する方法(index.values)

    PandasのIndexオブジェクトに格納されているデータをNumPy配列として取得したい場合は、index.valuesプロパティを使用します。このプロパティは、インデックスの各要素を含む配列を返してくれるため、データの抽出や他の処理への受け渡しが簡単に行えます。 index.valuesプロパティの基本的な使い方 まず、必要なライブラリをインポートします。 import pandas as pd 次に、Indexオブジェクトを作成します。ここでは、交通手段の名前を要素とするインデックスを作成してみましょう。 index = pd.Index([Car,Bike,Truck,Ship,Air