从复杂对象递归创建分层属性列表
在复杂对象包含多个子对象和具有不同数据类型的属性的情况下,需要建立这些属性的分层列表。为了实现这一点,递归循环方法是必不可少的。
给定问题:
提供了一个具有以下结构的对象:
<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中文网其他相关文章!