JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。

この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。

サンプルコード

以下は、Object.keys().map()Array.map()の動作を比較できるJavaScriptコードの例です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .result,.sample {
        font-size: 18px;
        font-weight: 500;
        color: rebeccapurple;
    }
    .result {
        color: red;
    }
</style>
</head>
<body>
<h1>Object.keys().map() VS Array.map()</h1>
<div class="sample">{1:'A',22:'B',55:'C',19:'D'}</div>
<div class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3>上のボタンをクリックすると、オブジェクトのキーの合計値が表示されます</h3>
<div class="sample">[22,33,11,44]</div>
<div class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3>上のボタンをクリックすると、配列の各要素が2倍されます</h3>
<script>
    let resEle = document.querySelectorAll(".result");
    let BtnEle = document.querySelectorAll(".Btn");
    let obj = { 1: "A", 22: "B", 55: "C", 19: "D" };
    let arr = [22, 33, 11, 44];
    let total = 0;
    BtnEle[0].addEventListener("click", () => {
        Object.keys(obj).map((x) => (total += parseInt(x)));
        resEle[0].innerHTML = "オブジェクトのキーの合計 = " + total;
    });
    BtnEle[1].addEventListener("click", () => {
        resEle[1].innerHTML = arr.map((x) => x * 2);
    });
</script>
</body>
</html>

コードのポイント

  • Object.keys(obj):オブジェクトobjのすべてのキー(["1", "22", "55", "19"])を文字列の配列として返します。
  • Object.keys().map():取得したキーの配列に対してmap()を適用し、parseInt(x)で数値に変換しながら合計値を計算しています。
  • Array.map():配列arrの各要素を直接2倍にした新しい配列([44, 66, 22, 88])を生成します。

実行結果

上記のコードを実行すると、以下のような出力が得られます。

JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

最初の「CLICK HERE」ボタンをクリックした場合:

JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

このとき、オブジェクトのキー「1 + 22 + 55 + 19」の合計である97が画面に表示されます。

次に、2つ目の「CLICK HERE」ボタンをクリックした場合:

JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

こちらは、配列の各要素が2倍になった[44, 66, 22, 88]が出力されます。

まとめ

配列に対してはArray.map()を直接使える一方、オブジェクトの場合はObject.keys()でキーを配列化してからmap()を適用する必要があります。用途に応じて使い分けることで、オブジェクトと配列のどちらでも柔軟にデータ変換処理を行えます。

  1. JavaScriptのMap(マップ)オブジェクトとは?基本的な使い方をサンプルコード付きで解説

    MapオブジェクトとはMap(マップ)オブジェクトは、ES6(ECMAScript 2015)で導入された組み込みオブジェクトの一つで、「キー」と「値」のペアで構成される要素を管理するコレクションです。通常のオブジェクトとよく似ていますが、Mapの大きな特徴は、キーにオブジェクトやプリミティブ値など、あらゆる型の値を使用できる点にあります。さらに、要素は挿入した順序で保持されるため、for...ofループなどを利用して、追加した順番どおりに反復処理を行うことも可能です。Mapオブジェクトの主なメソッドとプロパティメソッド / プロパティ説明new Map(iterable)配列などのイテラブル

  2. JavaScriptでオブジェクトを新しい配列に変換する方法

    JavaScriptでは、オブジェクトのプロパティやネストされたデータを取り出し、扱いやすい形で新しい配列にフォーマットできます。本記事では、学校(school)オブジェクトに含まれる生徒情報を、文字列形式の配列へ変換する実践的なコード例を紹介します。 ポイントとなるテクニック このサンプルでは、以下の2つのJavaScript機能を活用しています。 分割代入(Destructuring assignment):オブジェクトから特定のプロパティを簡潔に取り出す構文です。 for...of ループ:配列内の各要素を順番に処理するために使用します。 コード例 <!DOCTYPE html