JavaScript Fundamentals

JavaScriptハッシュマップ:オブジェクト vs. Mapオブジェクト

Spread the love

JavaScriptハッシュマップ:オブジェクト vs. Mapオブジェクト

JavaScriptには、他の言語のような直接的な「HashMap」相当のものがありません。しかし、プレーンなJavaScriptオブジェクトと組み込みのMapオブジェクトという2つの主要なアプローチを使用して、同様の機能を実現できます。この記事では、両方の方法を比較検討し、ニーズに最適なアプローチを選択するのに役立つ情報を提供します。

目次

オブジェクトをハッシュマップとして使用

JavaScriptオブジェクトは、単純なハッシュマップとして機能します。関連付けられた値にアクセスするために、文字列キーを使用します。このアプローチは簡単ですが、制限があります。

例:


const myHashMap = {}; // 空のオブジェクトを作成

// キーと値のペアを挿入
myHashMap.apple = 1;
myHashMap.banana = 2;
myHashMap.cherry = 3;

// 値にアクセス
console.log(myHashMap.banana); // 出力:2

// キーが存在するかどうかを確認
console.log('apple' in myHashMap); // 出力:true

// キーと値のペアを削除
delete myHashMap.banana;

// キーと値のペアを反復処理(順序は保証されません)
for (const key in myHashMap) {
  console.log(key, myHashMap[key]);
}

利点:

  • JavaScript開発者にとってシンプルでなじみ深い。
  • 外部依存関係がない。

欠点:

  • キーは文字列(または暗黙的に文字列に変換される値)に限定される。
  • 組み込みのサイズプロパティがないため、サイズを手動で追跡する必要がある。
  • getsethasなどの組み込みメソッドがない。
  • キーの順序は保証されない。

Mapオブジェクトの使用

Mapオブジェクト(ES6で導入)は、より堅牢なソリューションを提供します。キーとして任意のデータ型をサポートし、型強制の問題を回避し、効率的な操作のための組み込みメソッドを提供します。

例:


const myMap = new Map();

// キーと値のペアを挿入
myMap.set("apple", 1);
myMap.set(123, "number"); // キーとして数値
myMap.set({ a: 1 }, "object"); // キーとしてオブジェクト

// 値にアクセス
console.log(myMap.get("apple")); // 出力:1
console.log(myMap.get(123));     // 出力:"number"

// キーが存在するかどうかを確認
console.log(myMap.has("apple")); // 出力:true

// キーと値のペアを削除
myMap.delete("apple");

// サイズを取得
console.log(myMap.size); // 出力:2

// キーと値のペアを反復処理(順序は保持される)
for (const [key, value] of myMap) {
  console.log(key, value);
}

利点:

  • キーとして任意のデータ型をサポートする。
  • 組み込みメソッド(setgethasdeletesize)を提供する。
  • for...ofループによる効率的な反復処理。
  • 挿入順序を保持する。

欠点:

  • ES6互換性が必要(ただし、ポリフィルは利用可能)。

結論

プレーンなJavaScriptオブジェクトは、単純なハッシュマップのような動作には十分ですが、Mapオブジェクトは、その優れた機能と効率性から一般的に推奨されます。ブラウザの互換性に深刻な制約がない限り、Mapは最新のJavaScriptプロジェクトで推奨される選択肢です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です