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

JavaScriptで辞書(マップ)をループ処理する方法

はじめに

JavaScriptでは、辞書(キーと値のペアを管理するデータ構造)の中身を順番に処理したい場面がよくあります。ここでは、独自の辞書クラスにforEach関数を実装し、すべてのキーと値のペアに対して呼び出されるコールバック関数を受け取れるようにする方法を紹介します。

自作クラスでのforEach実装例

まずは、クラス内にforEachメソッドを実装してみましょう。for...inループでコンテナ内の各プロパティを走査し、キーと値を引数としてコールバックに渡します。

forEach(callback) {
    for (let prop in this.container) {
        // コールバックを callback(key, value) の形式で呼び出す
        callback(prop, this.container[prop]);
    }
}

動作確認

このメソッドは、以下のようにしてテストできます。

const myMap = new MyMap();
myMap.put("key1", "value1");
myMap.put("key2", "value2");

myMap.forEach((k, v) => console.log(`Key is ${k} and value is ${v}`));

出力結果

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

Key is key1 and value is value1
Key is key2 and value is value2

ES6のMapオブジェクトを使う場合

ES6(ECMAScript 2015)で標準搭載されたMapオブジェクトにも、同じように使えるforEachというプロトタイプメソッドが用意されています。自作クラスとほぼ同じ感覚で利用できるため、特別な理由がない限りはこちらを使うのがおすすめです。

const myMap = new Map([
    ["key1", "value1"],
    ["key2", "value2"]
]);

myMap.forEach((k, v) => console.log(`Key is ${k} and value is ${v}`));

出力結果

この場合も、実行すると次の出力が得られます。

Key is key1 and value is value1
Key is key2 and value is value2

まとめ

辞書型データのループ処理には、自作クラスにforEachを実装する方法と、ES6のMapオブジェクトの組み込みメソッドを使う方法の2つがあります。後者は標準機能として安定しており、コールバックの形式も直感的なので、実際の開発ではES6のMapを活用するのが効率的です。また、entries()メソッドやfor...of構文と組み合わせれば、さらに柔軟な反復処理も可能になります。

  1. 【初心者向け】JavaScriptのfor...ofループの使い方を実例つきで解説

    JavaScriptのfor...ofループは、配列、文字列、配列風オブジェクト(Array-like objects)、NodeListなど、反復可能(イテラブル)なオブジェクトの要素を先頭から順番に1つずつ取り出して処理するための構文です。 インデックスの管理が不要なため、従来のforループやforEachメソッドと比べてコードが簡潔になり、可読性や保守性が向上するというメリットがあります。 for...ofループの基本構文 for (変数 of 反復可能オブジェクト) {   // 各要素に対して実行したい処理 } サンプルコード 次の例では、for...ofループを使って文

  2. JavaScriptでオブジェクトを含む「配列の配列」をループ処理する方法

    JavaScriptでオブジェクトを含む多次元配列をループするには?JavaScriptでは、オブジェクトを含む配列の配列(入れ子構造の配列)をループ処理する際、forEach()メソッドをネストして使用し、さらにfor...inループで各オブジェクトのプロパティにアクセスするのが一般的な方法です。以下に、具体的な実装例を紹介します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device