javascript - 具有未知长度的数据结构

标签 javascript

如何动态打印?

data = {
    "name": "EU",
    "size": 10,
    "nodes": [
        {
            "name": "England",
            "size": 2,
            "nodes": [
                {
                "name": "Center",
                "size": 1,
                "nodes": [
                        {
                        "name": "main street",
                        "size": 0.5,
                        "nodes": []
                        }
                    ]
                },
                {
                "name": "Vilage",
                "size": 1,
                "nodes": []
                }
            ]
        },
        {
            "name": "Germany",
            "size": 4,
            "nodes": []
        }
    ]
}

我需要以某种方式动态打印它

EU 10
EU - England 2
EU - England - Center 1
EU - England - Center - main street 0.5
EU - England - Vilage 1
EU - Germany 4 

这是我最接近我需要的代码

var data = { "name": "EU", "size": 10, "nodes": [ { "name": "England", "size": 2, "nodes": [ { "name": "Center", "size": 1, "nodes": [ { "name": "main street", "size": 0.5, "nodes": [] } ] }, { "name": "Vilage", "size": 1, "nodes": [] } ] }, { "name": "Germany", "size": 4, "nodes": [] } ] }


function printValues(obj) {
  for (var key in obj) {
    if (typeof obj[key] === "object") {
      printValues(obj[key]);
    } else {
      console.log(obj[key]);
    }
  }
}
printValues(data)

这是我得到的

最佳答案

您走在正确的轨道上 - 您确实可以使用递归来遍历数据结构。您还需要获取 name 属性并根据遇到的每个 name 构建每行的开头。您可以使用第二个参数将该信息传递给递归函数。然后你需要递归调用每个子节点的函数,并传递目前遇到的所有name:

const data = { "name": "EU", "size": 10, "nodes": [ { "name": "England", "size": 2, "nodes": [ { "name": "Center", "size": 1, "nodes": [ { "name": "main street", "size": 0.5, "nodes": [] } ] }, { "name": "Vilage", "size": 1, "nodes": [] } ] }, { "name": "Germany", "size": 4, "nodes": [] } ] }


function printValues(data, prefix = []) {
  //make a copy of the prefix instead of mutating it
  let location = prefix.concat(data.name);
  console.log(location.join(" - "), data.size);

  data.nodes.forEach(child => printValues(child, location))
}

printValues(data)

关于javascript - 具有未知长度的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56129953/

相关文章:

javascript - 如果当前时间在使用 moment 的两个时间之间

javascript - 我的函数返回未定义,我该如何解决这个问题

javascript - 索引 firebase 对象

javascript - 为什么需要这个 JavaScript?

javascript - 如何实现选中所有、取消选中和清除复选框列表的所有选项?

javascript - 如何为 chrome 扩展设置一个简单的动态变量到 chrome.storage.local.set 中?

javascript - iDangerous Swiper 最后单击的元素回滚 slider

javascript - 如何匹配我创建的列表中的国家/地区,然后在该国家/地区在列表内时采取行动? (GeoIP 重定向)

javascript - chrome.tabs.captureVisibleTab 错误

javascript - 测试数组中超过某个值的所有值