map.set({ id: 1 }, value) の後に map.get({ id: 1 }) と書いても、登録した値は取り出せません。オブジェクトをキーにすると、プロパティの一致ではなく、同じオブジェクトかどうかで検索するためです。
2026年11月8日、macOS 27.2/Node.js v24.22.1で実行しました。ブラウザ・Windows・TypeScriptの型検査は試していません。コードを順に同じ .mjs に保存し、node ファイル名.mjs で再現できます。
同じidを書いても、別のキーになる
const key = { id: 1 };
const byObject = new Map([[key, 'Alice']]);
console.log(byObject.get(key));
console.log(byObject.get({ id: 1 }));
console.log(byObject.has({ id: 1 }));
console.log(key === { id: 1 });
出力:
Alice
undefined
false
false
保存した key を渡すと取得でき、新しく作った { id: 1 } では取得できません。ここでの === もfalseです。has もfalseなので、単に値がundefinedなのではなく、そのキーが存在しません。
ECMAScriptのMap.prototype.getと値の比較の定義が根拠です。オブジェクトのプロパティを順に比べる処理ではありません。
中身を書き換えても、同じキーのまま
先ほどの key のidを変更します。
key.id = 2;
console.log(byObject.get(key));
console.log(byObject.get({ id: 2 }));
console.log([...byObject.keys()][0].id);
出力:
Alice
undefined
2
idが変わっても、同じ key ならAliceを取得できました。一方、変更後と同じ内容の { id: 2 } では見つかりません。
保存されたキーを取り出すと、変更後のidである2が見えています。
IDで検索したいなら、ID自体をキーにする
「別に作ったデータでも、idが一致すれば取り出したい」という用途なら、キーをidにします。この例では一意な数値IDを使います。
const users = [{ id: 1, name: 'Alice' }];
const byId = new Map(users.map(user => [user.id, user]));
const request = { id: 1 };
console.log(byId.get(request.id)?.name);
console.log(byId.get('1'));
出力:
Alice
undefined
検索元の request は別のオブジェクトですが、数値1を渡して取得できました。ただし文字列の '1' では見つかりません。登録側と検索側でIDの型も合わせる必要があります。
同じオブジェクトそのものに情報を関連付けたいなら、最初の書き方が目的に合います。IDで探すのか、オブジェクト自体を区別するのかを決めます。
getのundefinedだけでは、未登録と決められない
値にundefinedを保存できるため、存在確認は has で分けます。
const values = new Map([['saved', undefined]]);
console.log(values.get('saved'), values.has('saved'));
console.log(values.get('missing'), values.has('missing'));
出力:
undefined true
undefined false
AIがMapを使うコードを書いたら、登録時と検索時のキーを見比べます。同じ参照、同じ内容の別オブジェクト、数値と文字列をそれぞれ渡すと、どの一致を前提にしたコードか確認できます。
未経験者向けの体験版を公開しています
- ▶ ライブデモ(インストール不要・無料)→ https://trial-web-ayies128s-projects.vercel.app/?ref=qiita
- 無料体験版(git clone して手元で動かす・⭐ Star もよろしくお願いします)→ https://github.com/ayies128/next-ai-camp-trial
- YouTube『AIエンジニア情報局』(AI×開発ニュースを1本5分で)→ https://www.youtube.com/channel/UC1rXVD9WYsQPQEWZyd-A1KA/?ref=qiita
※ 中上級者には易しすぎる内容なので、初心者の知り合いへの紹介や社内研修の参考としてどうぞ。