問題:
複雑なオブジェクトからのプロパティ キーのフラット化されたリストの作成階層を維持しながら、複数レベルのネストを使用します。
基礎となるデータ構造:
指定されたオブジェクトには、さまざまなレベルのプロパティを持つ階層構造があります。
望ましい出力:
階層を反映するプロパティ キーのリスト。
初期アプローチ:
基本的な再帰関数である反復がループに提供されます。オブジェクトを介してプロパティ キーを出力します。ただし、階層は維持されません。
解決策:
階層を考慮するために、スタック変数が導入され、オブジェクト内の現在のパスが保存されます。再帰関数がオブジェクトを走査すると、現在のプロパティがスタックに追加されます。プリミティブ プロパティが見つかると、そのプロパティへのフル パスを表す連結されたスタックとともに出力されます。
改訂コード:
<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>
関数の説明:
以上がネストされたオブジェクトのプロパティ リストを階層で平坦化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。