0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptの Object と Map の違い・操作・entriesまとめ

Last updated at Posted at 2025-05-10

JavaScriptにはキーと値のペアを扱う方法として ObjectMap の2種類があります。本記事では、ObjectとMapの違い・相互変換・基本操作・entries活用法までを実用的に解説します。


Object と Map の違い

比較項目 Object Map
主な用途 静的なデータ構造、JSONなどのデータ管理 柔軟なキー・順序管理、キャッシュなど
キーの型 文字列 または Symbol のみ 任意の型(オブジェクト、関数などもOK)
順序の保証 挿入順の保証が不安定な場合もある 挿入順を厳密に保証
イテレーション for...inObject.keys() が必要 map.forEach()for...of が使える
要素数の取得 Object.keys(obj).length .size プロパティで即取得可能
JSON互換性 JSON.stringify/parseで扱える 直接は不可、変換が必要
プロトタイプ継承 あり(意図しないプロパティが入る可能性) なし(Mapは純粋なキー値コレクション)

Object と Map の相互変換

Object → Map

const obj = { name: "Yuta", age: 30 };
const map = new Map(Object.entries(obj));

Map → Object

const map = new Map([
  ["name", "Yuta"],
  ["age", 30]
]);
const obj = Object.fromEntries(map);

Objectの基本操作

const obj = {};

// 追加・更新
obj.name = "Yuta";
obj["age"] = 30;

// 削除
delete obj.age;

// 存在確認
"name" in obj;
obj.hasOwnProperty("name");

// イテレーション
for (const key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);
  }
}

// キー・値・エントリ取得
Object.keys(obj);
Object.values(obj);
Object.entries(obj);

// コピー
const copied = { ...obj };
const copied2 = Object.assign({}, obj);

Mapの基本操作

const map = new Map();

// 追加・更新
map.set("name", "Yuta");
map.set("age", 30);

// 値の取得
map.get("name");

// 存在確認
map.has("name");

// 削除・全削除
map.delete("age");
map.clear();

// サイズ取得
map.size;

// イテレーション
for (const [key, value] of map) {
  console.log(key, value);
}

map.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});

// キー・値・エントリ取得
map.keys();
map.values();
map.entries();

entriesとは?

概念と定義

entries とは、「キーと値のペア([key, value])」の一覧を取得する仕組みです。

目的とメリット

  • オブジェクトやMapの内容をループ処理する
  • ObjectMap[key, value] 形式で扱いたいときに便利
  • フィルタや変換後の再構築にも活用できる

entries が使える対象

対象 メソッド 結果の形式
Object Object.entries(obj) [["key1", value1], ...]
Map map.entries() {[key1, value1], ...}
Set set.entries() {[value1, value1], ...}

使用例:Object.entries

const obj = { name: "Yuta", age: 30 };

for (const [key, value] of Object.entries(obj)) {
  console.log(`${key}: ${value}`);
}

使用例:Map.entries

const map = new Map([
  ["name", "Yuta"],
  ["age", 30]
]);

for (const [key, value] of map.entries()) {
  console.log(`${key}: ${value}`);
}

使用例:Set.entries

const set = new Set(["a", "b"]);

for (const [key, value] of set.entries()) {
  console.log(key, value); // a a, b b
}

よくある活用パターン

  • Object.entriesmap()Object.fromEntries() で変換
  • ネスト構造の平坦化
  • キーに対するフィルタ・マッピング処理

Object.entries を使ったマッピング処理

const obj = { a: 1, b: 2, c: 3 };

const mapped = Object.fromEntries(
  Object.entries(obj).map(([key, val]) => [key, val * 2])
);

console.log(mapped); // { a: 2, b: 4, c: 6 }

ネスト構造の変換(フラット化)

const nested = {
  user: {
    name: "Yuta",
    info: {
      age: 30,
      city: "Tokyo"
    }
  }
};

function flatten(obj, prefix = "") {
  return Object.entries(obj).reduce((acc, [key, val]) => {
    const fullKey = prefix ? `${prefix}.${key}` : key;
    if (typeof val === "object" && val !== null && !Array.isArray(val)) {
      Object.assign(acc, flatten(val, fullKey));
    } else {
      acc[fullKey] = val;
    }
    return acc;
  }, {});
}

console.log(flatten(nested));
// {
//   'user.name': 'Yuta',
//   'user.info.age': 30,
//   'user.info.city': 'Tokyo'
// }

entries系APIまとめ

メソッド 説明 対象
Object.entries(obj) Object → [key, value] の配列に変換 Object
Object.fromEntries(arr) [key, value] 配列 → Object に変換 配列/Map
Map.entries() Map のイテレータ([key, value]) Map
Set.entries() Set のイテレータ([value, value]) Set

関連リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?