1. ホーム
  2. javascript

[解決済み] JavaScriptにおけるマップとオブジェクトの比較

2022-03-22 14:47:08

質問

私はちょうど この機能 :

地図 Mapオブジェクトは単純なキー/バリューマップです。

それは困りましたね。通常のJavaScriptオブジェクトはディクショナリなのに、どうして Map 辞書とは違うのでしょうか?概念的には同じです。 Stack Overflowの別の質問 )

ドキュメントも役に立ちません。

Map オブジェクトはキーと値のペアのコレクションで、キーと値の両方が任意の ECMAScript 言語値である可能性があります。明確なキー値は、Map のコレクション内の 1 つのキー/値ペアにのみ発生します。マップが作成されるときに選択される比較アルゴリズムを使用して、区別されたキー値が識別されます。

<ブロッククオート

Mapオブジェクトは、その要素を挿入順に反復することができます。Map オブジェクトは、ハッシュテーブルか、平均してコレクション内の要素数に比例したアクセス時間を提供する他のメカニズムを使用して実装されなければなりません。このMapオブジェクトの仕様で使用されるデータ構造は、Mapオブジェクトの必要な観察可能なセマンティクスを記述することだけを目的としています。実行可能な実装モデルであることは意図していない。

...私にはまだオブジェクトのように聞こえるので、明らかに私が何かを見逃しているようです。

なぜJavaScriptは(十分にサポートされている)得に Map オブジェクトを作成することができます。それは何をするものですか?

どのように解決するのですか?

MDNによると

<ブロッククオート

Mapオブジェクトは、その要素を挿入順に反復することができます。 for..of ループは各反復に対して[key, value]の配列を返します。

そして

オブジェクトはマップと似ていて、どちらもキーに値を設定することができます。 その値を取得し、キーを削除し、何かがあるかどうかを検出します。 に格納される。このため、ObjectはMap しかし、オブジェクトとオブジェクトの間には重要な違いがあります。 とマップは、マップを使う方が良い。

オブジェクトはプロトタイプを持つので、マップにはデフォルトのキーが存在します。 しかし、map = Object.create(null) を使用すると、これを回避することができます。また Objectのキーは文字列で、Mapの場合は任意の値になります。 Mapの場合、手動でサイズを管理する必要がありますが、Mapの場合は簡単にサイズを取得することができます。 オブジェクトのサイズを追跡することができます。

地図

順番に繰り返せるというのは、どのブラウザでも同じパフォーマンスが得られるということもあり、開発者が長い間望んでいた機能です。ですから、私にとっては大きなポイントです。

その myMap.has(key) メソッドは特に便利でしょうし、また myMap.size プロパティを使用します。