Javascript递归函数在JSON上迭代的中断条件
我不确定如何检查和创建此递归函数的中断条件。此时,该函数冻结了浏览器(似乎无休止地循环) 我试图根据list对象中提供的数据生成一系列嵌套的无序列表 这是小提琴:Javascript递归函数在JSON上迭代的中断条件,javascript,json,recursion,break,Javascript,Json,Recursion,Break,我不确定如何检查和创建此递归函数的中断条件。此时,该函数冻结了浏览器(似乎无休止地循环) 我试图根据list对象中提供的数据生成一系列嵌套的无序列表 这是小提琴: var列表={ “主要”:[{ “项目”:“项目1” }, { “项目”:“项目2”, “中学”:[{ “项目”:“项目次要1” }, { “第二项”:“第二项” }, { “项目”:“项目中三”, “中学”:[{ “项目”:“项目内中1” }] }] }, { “项目”:“项目3” }] } 功能项(obj){ 变量输出=“”; 对
var列表={
“主要”:[{
“项目”:“项目1”
}, {
“项目”:“项目2”,
“中学”:[{
“项目”:“项目次要1”
}, {
“第二项”:“第二项”
}, {
“项目”:“项目中三”,
“中学”:[{
“项目”:“项目内中1”
}]
}]
}, {
“项目”:“项目3”
}]
}
功能项(obj){
变量输出=“”;
对于(i=0;i'+obj[i]。项+'';
if(对象类型[i].次要!=“未定义”){
项目(obj[i]。次要);
打破
}
}
输出+='
';
返回输出;
}
最终结果应该是:
<ul>
<li>item 1</li>
<li>item 2
<ul>
<li>item secondary 1</li>
<li>item secondary 2</li>
<li>item secondary 3
<ul>
<li>item inner secondary 1</li>
</ul>
</li>
</ul>
</li>
<li>item 3</li>
</ul>
- 项目1
- 项目2
- 项目中1
- 项目二
- 项目中三
- 项目内中一
- 项目3
可以使用嵌套方法来迭代对象和可能数组的键。然后建立输出和尊重,而不是给孩子
函数getItems(对象){
var输出=“”;
object&&typeof object==='object'&&object.keys(object.forEach)(函数(k){
if(k=='item'| |!object[k]){
回来
}
输出=输出| |';
输出+=(数组.isArray(对象[k])?对象[k]:[object[k]]).map(函数(a){
返回“- ”+a.item+getItems(a)+'
”;
}).加入(“”);
});
输出+=输出&“
”;
返回输出;
}
var list={primary:[{item:“item 1”},{item:“item secondary 1”},{item:“item secondary 2”},{item:“item secondary 3”},secondary:{item:“item internal secondary 1”}]},{item:“item secondary 3”},
结果=获取项目(列表);
document.body.innerHTML=结果代码>
.as console wrapper{max height:100%!important;top:0;}
请添加所需的结果。这是一个给定的数据结构,还是您可以稍微更改一点,将同一级别的数据分组到一个数组中?该结构不能像这样更改,但此方法要求每个键都是一个可能不会发生的数组。如果您在javascript文件底部的这个小提琴中查看var list_two,您将看到有效的json,但“item internal secondary 1”一点也没有得到考虑,我发现您的建议非常有用——如果(Array.isArray(object[k])| object[k]==object(object))我会告诉你:)我发现了其他的方法,但这一种对我来说似乎很强大。顺便说一下,我不能依赖于检查某个特定密钥的存在。。但是你帮我做了一些有用的东西。非常感谢。
<ul>
<li>item 1</li>
<li>item 2
<ul>
<li>item secondary 1</li>
<li>item secondary 2</li>
<li>item secondary 3
<ul>
<li>item inner secondary 1</li>
</ul>
</li>
</ul>
</li>
<li>item 3</li>
</ul>