javascript - 如何从嵌套数组动态和递归地呈现列表项?
问题描述
给定输出,我想<li>
动态列出
results = [
{
name: 'a1',
results: []
},
{
name: 'a2',
results: [
{
name: 'b1',
results: []
},
{
name: 'b2',
results: [
{
name: 'c1',
}
]
}
]
},
{
name: 'a3',
}
]
这是预期的输出
<li>a1</li>
<li>a2</li>
<li>b1</li>
<li>b2</li>
<li>c1</li>
<li>a3</li>
我的伪代码,但我认为这甚至不接近......我认为我需要“递归”解决方案来解决这个问题
input.map((r) => {
if(r) {
return renderResult(r);
} <<< This is not a recursive way...
return renderResult(r.results.?);
});
如何动态和递归地列出它?
解决方案
您的解决方案几乎就是这个
function generate(arr) {
const items = [];
arr.forEach( i => {
items.push(i.name); //Or whatever you want
});
return items;
}
只需引入递归
function generate(arr) {
const items = [];
arr.forEach( i => {
items.push(i.name);
if( !!i.results ){
const subs = generate(i.results);
subs.forEach( s => items.push(s));
}
});
return items;
}
推荐阅读
- vue.js - 根据存储获取器有条件地显示/隐藏 b 表列
- python - 更改导入模块的日志级别
- javascript - 谷歌脚本 - 根据另一张纸上的复选框隐藏/取消隐藏谷歌表格
- azure - Azure 警报未触发/触发
- scala - 删除任何带有 NULL 的行
- javascript - 将 HOC 重构为钩子
- asp.net-mvc - 仍然有 ddl 重定向问题
- excel - VBA根据动态选择选择行
- visual-studio - 如何让我的 Visual Studio 解决方案在 teamcity 中使用最新版本的 nuget.exe
- javascript - 尝试在类内调用发射方法时,从 EventEmitter 扩展的类上未定义的“this”