Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript递归函数在JSON上迭代的中断条件_Javascript_Json_Recursion_Break - Fatal编程技术网

Javascript递归函数在JSON上迭代的中断条件

Javascript递归函数在JSON上迭代的中断条件,javascript,json,recursion,break,Javascript,Json,Recursion,Break,我不确定如何检查和创建此递归函数的中断条件。此时,该函数冻结了浏览器(似乎无休止地循环) 我试图根据list对象中提供的数据生成一系列嵌套的无序列表 这是小提琴: var列表={ “主要”:[{ “项目”:“项目1” }, { “项目”:“项目2”, “中学”:[{ “项目”:“项目次要1” }, { “第二项”:“第二项” }, { “项目”:“项目中三”, “中学”:[{ “项目”:“项目内中1” }] }] }, { “项目”:“项目3” }] } 功能项(obj){ 变量输出=“”; 对

我不确定如何检查和创建此递归函数的中断条件。此时,该函数冻结了浏览器(似乎无休止地循环)

我试图根据list对象中提供的数据生成一系列嵌套的无序列表

这是小提琴:

var列表={
“主要”:[{
“项目”:“项目1”
}, {
“项目”:“项目2”,
“中学”:[{
“项目”:“项目次要1”
}, {
“第二项”:“第二项”
}, {
“项目”:“项目中三”,
“中学”:[{
“项目”:“项目内中1”
}]
}]
}, {
“项目”:“项目3”
}]
}
功能项(obj){
变量输出=“
    ”; 对于(i=0;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>