從複雜物件遞歸建立分層屬性清單
在複雜物件包含多個子物件和具有不同資料類型的屬性的情況下,需要建立這些屬性的分層清單。為了實現這一點,遞歸循環方法是必不可少的。
給定問題:
提供了一個具有以下結構的物件:
<code class="javascript">var object = { aProperty: { aSetting1: 1, aSetting2: 2, aSetting3: 3, aSetting4: 4, aSetting5: 5 }, bProperty: { bSetting1: { bPropertySubSetting : true }, bSetting2: "bString" }, cProperty: { cSetting: "cString" } };</code>
期望的輸出:
目標是建立一個準確反映物件層次結構的鍵列表:
aProperty.aSetting1 aProperty.aSetting2 aProperty.aSetting3 aProperty.aSetting4 aProperty.aSetting5 bProperty.bSetting1.bPropertySubSetting bProperty.bSetting2 cProperty.cSetting
初始解:
<code class="javascript">function iterate(obj) { for (var property in obj) { if (obj.hasOwnProperty(property)) { if (typeof obj[property] == "object") { iterate(obj[property]); } else { console.log(property + " " + obj[property]); } } } }</code>
此函數循環遍歷物件並列印鍵,但它不維護層次結構。
遞歸解:
為了保留層次結構,我們可以維護一個表示目前屬性路徑的堆疊字串。當遇到原始屬性時,將列印路徑。對於巢狀對象,堆疊會更新,遞歸繼續。
<code class="javascript">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(property + " " + obj[property]); $('#output').append($("<div/>").text(stack + '.' + property)) } } } } iterate(object, '');</code>
附加說明:
以上是如何在 JavaScript 中從複雜物件遞歸建立分層屬性清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!