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開発者にとってシンプルでなじみ深い。
- 外部依存関係がない。
欠点:
- キーは文字列(または暗黙的に文字列に変換される値)に限定される。
- 組み込みのサイズプロパティがないため、サイズを手動で追跡する必要がある。
get
、set
、has
などの組み込みメソッドがない。- キーの順序は保証されない。
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);
}
利点:
- キーとして任意のデータ型をサポートする。
- 組み込みメソッド(
set
、get
、has
、delete
、size
)を提供する。 for...of
ループによる効率的な反復処理。- 挿入順序を保持する。
欠点:
- ES6互換性が必要(ただし、ポリフィルは利用可能)。
結論
プレーンなJavaScriptオブジェクトは、単純なハッシュマップのような動作には十分ですが、Map
オブジェクトは、その優れた機能と効率性から一般的に推奨されます。ブラウザの互換性に深刻な制約がない限り、Map
は最新のJavaScriptプロジェクトで推奨される選択肢です。