javascript - 使用javascript循环遍历具有多个子对象的JSON对象

标签 javascript json nested nested-loops

我正在尝试遍历一个看起来像这样的 Json 对象

    [
      {
        "yang_type": "container",
        "name": "c1",
        "value": "",
        "children": [
          {
            "yang_type": "",
            "name": "type",
            "value": "Uint32",
            "children": []
          },
          {
            "yang_type": "list",
            "name": "DNS",
            "value": "",
            "children": [
              {
                "name": "type",
                "value": "String",
                "children": [],
                "yang_type": ""
              },
              {
                "yang_type": "leaf",
                "name": "ip-address",
                "value": "",
                "children": [
                  {
                    "name": "type",
                    "value": "string",
                    "children": [],
                    "yang_type": ""
                  }
                ]
              },
              {
                "yang_type": "leaf",
                "name": "Domain",
                "value": "",
                "children": [
                  {
                    "name": "type",
                    "value": "string",
                    "children": [],
                    "yang_type": ""
                  }
                ]
              }
            ]
          }
        ]
      }
    ]

我正在尝试这个逻辑,但它不会循环遍历第一个 child 的 child 。

while(m.children.length >= 1) {
    if(m.yang_type!='' && m.name!=''){
       {$log.error("parent:",m.yang_type,m.name);}
    }
    if(m.name!='' && m.value!=''){
       {$log.error("child:",m.name,m.value);}
    }
    m = m.children[m.children.length - 1];   
}

上面的代码并没有遍历所有的 child 。我做错了什么?

最佳答案

您尝试遍历数组。您的尝试不会以这种方式起作用。

您可以使用回调进行迭代,并将其用于子级的递归调用。

function loop(a) {
    console.log(a.name);                                   // process you data
    Array.isArray(a.children) && a.children.forEach(loop); // check and iterate children
}

var data = [{ "yang_type": "container", "name": "c1", "value": "", "children": [{ "yang_type": "", "name": "type", "value": "Uint32", "children": [] }, { "yang_type": "list", "name": "DNS", "value": "", "children": [{ "name": "type", "value": "String", "children": [], "yang_type": "" }, { "yang_type": "leaf", "name": "ip-address", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }, { "yang_type": "leaf", "name": "Domain", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }] }] }];

data.forEach(loop);

使用缩进输出进行编辑。

function loop(level) {
    return function (a) {
        var i = level, s = '';
        while (i--) {
            s += '  ';
        }
        if (level) {
            s += '*';
        }
        a.yang_type ? 
            console.log(s + a.yang_type + ' ' + a.name) :
            console.log(s + a.name + ' ' + a.value);
        Array.isArray(a.children) && a.children.forEach(loop(level + 1));
    }
}

var data = [{ "yang_type": "container", "name": "c1", "value": "", "children": [{ "yang_type": "", "name": "type", "value": "Uint32", "children": [] }, { "yang_type": "list", "name": "DNS", "value": "", "children": [{ "name": "type", "value": "String", "children": [], "yang_type": "" }, { "yang_type": "leaf", "name": "ip-address", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }, { "yang_type": "leaf", "name": "Domain", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }] }] }];

data.forEach(loop(0));

关于javascript - 使用javascript循环遍历具有多个子对象的JSON对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37763663/

相关文章:

javascript - 如何处理未捕获的 java.lang.IllegalStateException : Initial revision has already been set?

javascript - 如何将json对象作为参数传递给另一个方法

javascript - 使用 Lodash 计算两个标准的总数

JAVA:嵌套在公共(public)类的迭代器中

javascript - 如何阻止其他网站的 FRAME src 到我们的网站

javascript - 是什么导致无法检测到此 Vue 3 应用程序中 html 元素外部的单击事件?

javascript - 如何正确使用Parse.query.equalTo?

java - JSON 到 java.sql.timestamp 反序列化丢失了几个小时,导致日期丢失了一天

javascript - 通过变量访问嵌套的 Javascript JSON 属性

html - 如何根据深度级别在嵌套元素中获得不同的样式?