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

JavaScriptでオブジェクトのキーと値を反転させる方法(逆マッピング)

JavaScriptでは、オブジェクトを受け取り、キーと値を入れ替えた新しいオブジェクトを返す関数 reverseObject() を作成する必要がある場面があります。これは「逆オブジェクトマッピング」と呼ばれる処理です。

実装のアプローチ

この問題は、Object.keys() で元のオブジェクトのキーを順番に取り出し、それぞれの「キーと値のペア」を「値とキーのペア」として新しいオブジェクトに格納していくことで実現できます。

注意すべき点は、同じ値を持つキーが複数存在する可能性があることです。そのため、新しいオブジェクトの値は配列として管理し、該当する値がすでに存在する場合は配列に追加し、存在しない場合は新しい配列を作成します。

サンプルコード

const cities = {
    'Jodhpur': 'Rajasthan',
    'Alwar': 'Rajasthan',
    'Mumbai': 'Maharasthra',
    'Ahemdabad': 'Gujrat',
    'Pune': 'Maharasthra'
};
const reverseObject = (obj) => {
    const newObj = {};
    Object.keys(obj).forEach(key => {
        if(newObj[obj[key]]){
            newObj[obj[key]].push(key);
        }else{
            newObj[obj[key]] = [key];
        }
    });
    return newObj;
};
console.log(reverseObject(cities));

実行結果

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

{
    Rajasthan: [ 'Jodhpur', 'Alwar' ],
    Maharasthra: [ 'Mumbai', 'Pune' ],
    Gujrat: [ 'Ahemdabad' ]
}

コードの解説

この例では、都市名をキー、州名を値とするオブジェクト cities を用意しています。反転処理を行うことで、州名がキーとなり、その州に属する都市名が配列として値に格納されます。

たとえば「Rajasthan」には「Jodhpur」と「Alwar」の2つの都市が属しているため、出力結果ではこれらがひとつの配列にまとめられています。このように、値の重複に対応した柔軟なデータ変換が可能になります。

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

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

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

    JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa