一般来说,我对递归和编程还很陌生,作为初学者练习,我试图从多维数组中获取数据并从中制作一个简单的缩进树。
假设我有一个数组,其中嵌套了数组,每个 0-index 字符串是一个标题,或者随着数组的进行,另一个的子标题等等。
arr = ['Navigation','Homepage',['Social','Facebook','Twitter'],'Projects','Experience',['Gaming','Steam',['Streaming','Twitch','Hitbox']]];
在这种情况下,导航是所有内容的主要标题,社交是 Facebook 和 Twitter 的标题。Projects 和 Experiences 只是其标题的子项,应该与 Social 具有相同的缩进。
这是我想出的代码:
function tree(tarr) {
for (var i = 0; i < tarr.length; i++) {
if (typeof tarr[i] == 'string') {
if (i == 0) {
console.log(tarr[i] + ":");
} else {
console.log(tarr[i]);
}
} else {
tree(tarr[i]);
}
}
}
tree(arr);
我认为递归在这里至关重要,因此我使用了它。此外,我能够在标题中添加冒号,但我找不到将每个子标题及其子标题缩进相应数量的方法。
无论如何,我正在尝试实现这种结构:
Navigation:
Homepage
Social:
Facebook
Twitter
Projects
Experiment
Games:
Steam
Streaming:
Twitch
Hitbox
试试这个:
arr = ['Navigation', 'Homepage', ['Social', 'Facebook', 'Twitter'], 'Projects', 'Experience', ['Gaming', 'Steam', ['Streaming', 'Twitch', 'Hitbox']]];
function print_format(a, intent) {
a.map((val, index) => {
if (Array.isArray(val)) {
print_format(val, intent + 4)
} else {
if (index === 0) {
console.log(" ".repeat(intent) + val + ":")
} else {
// Make sure to use same constant value(4), which is used to increment intent
console.log(" ".repeat(intent + 4) + val)
}
}
})
}
print_format(arr, 0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句