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

【JavaScript】ドット表記の文字列をネストされたオブジェクトに変換する方法

JavaScriptでは、「details1.details2.details3」のようなドット表記で書かれたキーの文字列を、実際にネストされた(入れ子構造の)オブジェクトへ変換したいケースがあります。本記事では、split()map()を組み合わせて、この変換をシンプルに実現する方法を解説します。

変換元のデータ

例として、次のようなドット表記の文字列があるとします。

const keys = "details1.details2.details3.details4.details5"

そして、最も深い階層に設定したい値は次のとおりです。

const firsName = "David";

変換の考え方

ネストされたオブジェクトへの変換には、次の流れで処理を行います。

  • split('.')で文字列をドット区切りで分割し、キーの配列を作成する
  • map()で各キーを順番に処理しながら、オブジェクトの階層を一段ずつ深くしていく
  • 最後のキーに到達したタイミングで、空のオブジェクト{}の代わりに目的の値を代入する

ポイントは、containerという変数を使って現在の階層への参照を保持し続けることです。これにより、ループ処理の中でどんどん深い階層へと潜っていき、目的の位置に値をセットできます。

コード例

以下が実際のコードです。

const keys = "details1.details2.details3.details4.details5"
const firsName = "David";
var tempObject = {};
var container = tempObject;
keys.split('.').map((k, i, values) => {
   container = (container[k] = (i == values.length - 1 ? firsName : {}))
});
console.log(JSON.stringify(tempObject, null, ' '));

プログラムの実行方法

上記のプログラムを実行するには、Node.jsで次のコマンドを使用します。

node fileName.js

ここでは、ファイル名を「demo227.js」として保存しています。

実行結果

出力は以下のようになります。ドット表記の文字列が、5階層のネストされたオブジェクトに正しく変換されていることが確認できます。

PS C:\Users\Amit\JavaScript-code> node demo227.js
{
 "details1": {
  "details2": {
   "details3": {
    "details4": {
     "details5": "David"
    }
   }
  }
 }
}

まとめ

ドット表記の文字列からネストされたオブジェクトを生成するには、split('.')でキーを配列に分解し、map()で階層を順に構築するのが効果的です。設定ファイルやAPIのパラメータを階層構造へ変換したい場合などに、ぜひ活用してみてください。


  1. 文字列をJavaScriptオブジェクトに変換する方法【JSON.parse()の使い方】

    JavaScriptでJSON形式の文字列をオブジェクトに変換するには、JSON.parse()メソッドを使用します。このメソッドは、引数に渡された文字列を解析(パース)し、対応するJavaScriptオブジェクトを返します。 サンプルコード <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Docum

  2. 【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法

    JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht