javascript - 如何遍历嵌套数据

标签 javascript loops iteration lodash

我必须遍历一个大数据集来收集 javascript 中节点的最终子元素。

我需要以在子详细信息中找到的分支代码数组结束。 这是我试图获得的输出:

[1000, 1201, 1202, 2101, 3101, 3201]

{
  "TITLE": {
    "FirstLevel": {
      "Details": {
        "Code": "01",
      },
      "SecondLevel": [
        {
          "Details": {             
            "Description": "{desc}",          
          },
          "ThirdLevel": {
            "Details": {
              "Code": "01",
            },
            "FourthLevel": [
              {
                "Details": {
                  "Code": "11",
                },
                "Branch": {
                  "Details": {
                    "Code": "1000",
                  }
                }
              },
              {
                "Details": {
                  "Code": "12",
                },
                "Branch": [
                  {
                    "Details": {
                      "Code": "1201",
                    }
                  },
                  {
                    "Details": {
                      "Code": "1202",
                    }
                  }
                ]
              }
            ]
          }
        },
        {
          "Details": {
            "Code": "100",
          },
          "ThirdLevel": [
            {
              "Details": {
                "Code": "02",
              },
              "FourthLevel": {
                "Details": {
                  "Code": "21"
                },
                "Branch": {
                  "Details": {
                    "Code": "2101",
                  }
                }
              }
            },
            {
              "Details": {
                "Code": "03",
              },
              "FourthLevel": [
                {
                  "Details": {
                    "Code": "31",
                  },
                  "Branch": {
                    "Details": {
                      "Code": "3101",
                    }
                  }
                },
                {
                  "Details": {
                    "Code": "32",
                  },
                  "Branch": {
                    "Details": {
                      "Code": "3201",
                    }
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

我查看了更多基本问题的答案并尝试调整解决方案。

一个这样的解决方案接受传递的 id,并将根据 id 更新名称。我想我可以在这里使用类似的 map 实现。存在一个问题,因为该数组不仅有“子节点”来表示子节点的位置。

function update(object, passedId) {

    object.children.map((element, index) => {
        if (element.id === passedId) {
            console.log(index)
            object.children[index].name = "New Name"
        }
        if (element.children != null) { // condition for checking Nesting
            update(element, passedId)
        }
    })

    console.log(object.children)
}

update(obj, "Branch");

接下来我尝试了一种更简单的方法

function getSubItem(obj) {
  for (item in obj) {
    for (subItem in obj[item]) {
      for (subsubItem in obj[subItem]){
      console.log(obj[item][subItem][subsubItem]);
      }
    }
  }
}
getSubItem(obj)

等等,在sub item之后的sub之后添加sub,但是那种嵌套的for循环看起来非常不稳定,而且由于分支可以嵌套在不同的区域,所以它看起来也不可靠。我在这里错过了一个简单的解决方案吗?

最佳答案

类似于:

function update (data, passedId, acc = []) {
    if (!_.isObject(data)) {
        return acc;
    }

    return _.reduce(_.values(data), (result, item) => {
        result = _.chain(item)
            .get(passedId)
            .thru(val => [val])
            .flatten()
            .compact()
            .map('Details.Code')
            .thru(vals => _.concat(result, vals))
            .value();
       return update(item, passedId, result);
    }, acc);
}

const res = update(data, 'Branch');

关于javascript - 如何遍历嵌套数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582631/

相关文章:

javascript - 如何在react-router-dom中使用基于角色的身份验证?

javascript - ajax 调用内的循环 - 我对事件的顺序感到困惑

javascript - 在函数中添加另一个搜索字段

c# - 如何去Jquery中的函数定义?

ruby - 用引号包装插值

c++ - 需要帮助在循环/数组程序 C++ 中显示值

python - itertools.islice 与列表切片相比

python - 以最少的迭代进行列表操作

python - 嵌套字典的划分

c# - 为什么 .NET 中的通用 Dictionary 不提供 ForEach() 方法?