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つの都市が属しているため、出力結果ではこれらがひとつの配列にまとめられています。このように、値の重複に対応した柔軟なデータ変換が可能になります。
-
JavaScriptのMap(マップ)オブジェクトとは?基本的な使い方をサンプルコード付きで解説
MapオブジェクトとはMap(マップ)オブジェクトは、ES6(ECMAScript 2015)で導入された組み込みオブジェクトの一つで、「キー」と「値」のペアで構成される要素を管理するコレクションです。通常のオブジェクトとよく似ていますが、Mapの大きな特徴は、キーにオブジェクトやプリミティブ値など、あらゆる型の値を使用できる点にあります。さらに、要素は挿入した順序で保持されるため、for...ofループなどを利用して、追加した順番どおりに反復処理を行うことも可能です。Mapオブジェクトの主なメソッドとプロパティメソッド / プロパティ説明new Map(iterable)配列などのイテラブル
-
JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説
JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa