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

JavaScriptのMapとオブジェクトの違い―使い分けのポイントを解説

MDNのドキュメントによると、Mapオブジェクトはキーと値のペアを保持し、キーが挿入された元の順序を記憶するデータ構造です。任意の値(オブジェクトもプリミティブ値も含む)を、キーにも値にも使用できます。

Mapの主な特徴

ここで特に注目すべきは、オブジェクトそのものをMapのキーとして使えるという点です。これは通常のJavaScriptオブジェクトにはない機能です。JSオブジェクトの場合、キーとして使用できるのは文字列やシンボルなどのプリミティブ値だけに限られます。

もう一つ便利な特徴は、Mapがイテラブル(反復可能)であることです。しかも要素は挿入順に沿って反復されます。そのため、「キーの並び順を維持しつつ、それぞれに対応する値を関連付けて管理したい」という場面でMapは非常に有効です。

使用例

Mapの基本的な使い方は以下のとおりです。文字列・オブジェクト・関数など、さまざまな種類のキーで値を設定できます。

const myMap = new Map();
const keyString = 'a string';
const keyObj = {};
const keyFunc = function() {};
// あらゆる種類のキーで値を設定
myMap.set(keyString, "String Val");
myMap.set(keyObj, 'Object val');
myMap.set(keyFunc, 'function val');
console.log(myMap.size);
console.log(myMap.get(keyString));

実行結果

上記のコードを実行すると、次の出力が得られます。

3
String Val

myMap.sizeは登録されたエントリの数「3」を返し、myMap.get(keyString)は対応する値「String Val」を取得しています。

いつMapを使い、いつオブジェクトを使う?

  • Mapが向いているケース: キーが動的に追加・削除される場合、オブジェクトや関数をキーにしたい場合、キーの挿入順を厳密に保ちたい場合、要素数を頻繁に参照したい場合(sizeプロパティで即座に取得可能)。
  • オブジェクトが向いているケース: 構造が固定された設定情報やデータの保持、JSONとの相互変換が必要な場合、コードの簡潔さを優先したい場合。

このように、柔軟なキー操作と順序の保持が必要ならMapを、シンプルな静的データ構造には従来のオブジェクトを選ぶのが基本の使い分けです。

  1. JavaScriptのMap(マップ)オブジェクトとは?基本的な使い方をサンプルコード付きで解説

    MapオブジェクトとはMap(マップ)オブジェクトは、ES6(ECMAScript 2015)で導入された組み込みオブジェクトの一つで、「キー」と「値」のペアで構成される要素を管理するコレクションです。通常のオブジェクトとよく似ていますが、Mapの大きな特徴は、キーにオブジェクトやプリミティブ値など、あらゆる型の値を使用できる点にあります。さらに、要素は挿入した順序で保持されるため、for...ofループなどを利用して、追加した順番どおりに反復処理を行うことも可能です。Mapオブジェクトの主なメソッドとプロパティメソッド / プロパティ説明new Map(iterable)配列などのイテラブル

  2. JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

    JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa