>_DEVELOP

ヘッダー画像1
ヘッダー画像2
ヘッダー画像3

$ sudo learn –daily –append >> ~/brain/tech.log

JavascriptのMapについて体系的に理解する。

JavaScript の Map を体系的に理解する

はじめに

Javascriptを使用していて、理解が曖昧だった箇所があり、1から学びなおすことにしました。

Mapというオブジェクトを使えば、1:1のデータ構造を簡単に扱うことができます。

C++で言うところのenum tableのような使い方ができますが、Mapは独自にメソッドを持っており、

C++で言うところのstd::vectorなどの持つ配列操作用のメソッドに近い使用感で処理を書くことができます。

1. 概要

Map は「キーと値のペア」を保持する組み込みオブジェクトです。
主な特徴は以下です:

  • 任意の型の値をキーにできる(文字列、数値、オブジェクト、関数、シンボルなど)
  • キーの挿入順序を保持する
  • サイズを O(1) で取得できる.size プロパティ)
  • 反復可能(iterable) なので for...of やスプレッド構文で展開可能

2. 基本構文と主要メソッド


3. イテレーション

Map は挿入順で反復可能です。


4. 他のコレクションとの比較

特徴ObjectMap
キーの型文字列 or シンボル任意の型(オブジェクト含む)
順序保証一部規定あり(仕様上複雑)挿入順を厳密に保持
サイズ取得O(n)(Object.keys().lengthO(1)(.size
イテレーションfor...inObject.keys直接反復可能

5. 実践例

5-1. 頻度カウント

5-2. キャッシュ


6. .has() の仕様

.has(key) はキーの存在有無を返す。

  • 値が undefined でもキーがあれば true
  • 比較は SameValueZero(NaN を含めて等しいとみなす)

7. シリアライズ(JSON化)

Map は直接 JSON.stringify() すると空オブジェクト {} になる。
保存する場合は配列に変換する:


8. 注意点

  • 参照比較:オブジェクトや配列をキーにするときは同一参照でなければ一致しない
  • JSON変換:直接はできない
  • WeakMap:キーをオブジェクト限定にして GC と連動させたい場合は WeakMap を使う