ホームページ  >  記事  >  ウェブフロントエンド  >  ネストされたオブジェクトのプロパティ リストを階層で平坦化する方法

ネストされたオブジェクトのプロパティ リストを階層で平坦化する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-20 14:30:02796ブラウズ

How to Flatten a Nested Object's Property List with Hierarchy?

プロパティ リストを構築するためのオブジェクトの再帰ループ

問題:
複雑なオブジェクトからのプロパティ キーのフラット化されたリストの作成階層を維持しながら、複数レベルのネストを使用します。

基礎となるデータ構造:
指定されたオブジェクトには、さまざまなレベルのプロパティを持つ階層構造があります。

望ましい出力:
階層を反映するプロパティ キーのリスト。

初期アプローチ:
基本的な再帰関数である反復がループに提供されます。オブジェクトを介してプロパティ キーを出力します。ただし、階層は維持されません。

解決策:
階層を考慮するために、スタック変数が導入され、オブジェクト内の現在のパスが保存されます。再帰関数がオブジェクトを走査すると、現在のプロパティがスタックに追加されます。プリミティブ プロパティが見つかると、そのプロパティへのフル パスを表す連結されたスタックとともに出力されます。

改訂コード:

<code class="js">function iterate(obj, stack) {
  for (var property in obj) {
    if (obj.hasOwnProperty(property)) {
      if (typeof obj[property] === "object") {
        iterate(obj[property], stack + "." + property);
      } else {
        console.log(stack + "." + property);
        $('#output').append($('<div>').text(stack + "." + property));
      }
    }
  }
}

iterate(object, "");</code>

更新されたソリューション:
参照された回答の更新されたソリューションは、マップ関数とリデュース関数の組み合わせを使用して、オブジェクトを再帰的に走査し、プロパティ キーのフラット化されたリストを構築する、よりクリーンな実装を提供します。

<code class="js">Object.keys(object).map(key => createPath(object, key, "")).reduce((a, b) => a.concat(b))</code>

関数の説明:

  • createPath: ルート オブジェクトから現在のプロパティへのプロパティ パスを再帰的に構築します。
  • reduce: すべてのプロパティからのプロパティ パスの配列を単一のフラット化された配列に結合します。

以上がネストされたオブジェクトのプロパティ リストを階層で平坦化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。