如何动态打印?
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/