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

配列を受け取り、データ型ごとに分類したMapを返すJavaScript関数の作り方

混合したデータ型を含む配列を受け取り、要素をそれぞれのデータ型ごとにグループ化した Map を返す関数 classifyArray() を作成することを考えてみましょう。

要件の例

// 入力配列が以下の場合:
const arr = ['class', 2, [7, 8, 9], {"name": "Michael"}, Symbol('foo'),
true, false, 'name', 6];
// 出力されるMapは次のようになります:
Map(5) {
    'string' => [ 'class', 'name' ],
    'number' => [ 2, 6 ],
    'object' => [ [ 7, 8, 9 ], { name: 'Michael' } ],
    'symbol' => [ Symbol(foo) ],
    'boolean' => [ true, false ]
}

コード例

この関数は、Array.prototype.reduce() メソッドと Map オブジェクトを組み合わせることで簡潔に実装できます。各要素に対して typeof 演算子でデータ型を判定し、その型をキーとして要素を振り分けていきます。

const arr = ['class', 2, [7, 8, 9], {"name": "Michael"}, Symbol('foo'),
true, false, 'name', 6];
const classifyArray = arr => {
    return arr.reduce((acc, val) => {
        const previousData = acc.get(typeof val);
        if(previousData){
            acc.set(typeof val, [...previousData, val]);
        }else{
            acc.set(typeof val, [val]);
        };
        return acc;
    }, new Map());
};
console.log(classifyArray(arr));

実行結果

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

Map(5) {
    'string' => [ 'class', 'name' ],
    'number' => [ 2, 6 ],
    'object' => [ [ 7, 8, 9 ], { name: 'Michael' } ],
    'symbol' => [ Symbol(foo) ],
    'boolean' => [ true, false ]
}

コードの解説

この実装の処理の流れは以下のとおりです。

  • reduce() の初期値として空の new Map() を渡します。
  • コールバック関数内で typeof val によって現在の要素のデータ型を取得します。
  • acc.get() で同じ型のキーがすでに存在するかを確認します。
  • キーが存在する場合は、スプレッド構文 [...previousData, val] を使って既存の配列に新しい要素を追加します。
  • キーが存在しない場合は、新しいキーとして対象の要素を1つだけ持つ配列をセットします。

最終的に、データ型名をキー、その型に属する要素の配列を値とする Map が返されます。なお、null や配列も typeof では 'object' として判定されるため、より厳密な分類が必要な場合は Array.isArray() などを併用するとよいでしょう。

  1. JavaScriptで関数を呼び出す方法をわかりやすく解説

    JavaScriptでは、独自の関数(ユーザー定義関数)を作成することができます。一度定義した関数は、スクリプト内の後の任意の場所で関数名()と記述するだけで簡単に呼び出せます。 関数を呼び出すサンプルコード 以下のコードでは、「Say Hello」ボタンをクリックするとsayHello関数が実行され、画面にメッセージが表示されます。実際にブラウザで動かして、JavaScriptにおける関数の呼び出し方を確認してみましょう。 <html>    <head>       <script>   &

  2. JavaScript関数からオブジェクトを返す方法をわかりやすく解説

    JavaScriptの関数からオブジェクトを返すには、return文を使用します。オブジェクト内のプロパティやメソッドにアクセスする際は、thisキーワードを活用すると便利です。この記事では、実際のコード例を使いながら、JavaScript関数からオブジェクトを返す基本的な方法を解説します。基本的な考え方JavaScriptでは、オブジェクトの中にメソッド(関数)を定義できます。そのメソッド内でreturn文を使えば、処理結果や値を呼び出し元に返すことができます。また、thisキーワードを参照することで、同じオブジェクト内の他のプロパティにアクセス可能です。サンプルコード以下のコードでは、従業