javascript - 根据深度记录的 JSON 对象树控制台 [平面 JS]
问题描述
所以我试图得到与此类似的 console.loged 结果:
LT 10
LT - Kaunas 2
LT - Kaunas - Centras 1
LT - Kaunas - Centras - lasives al. 0.5
LT - Kaunas - Žaliakalnis 1
LT - Vilnius 4
从这个 JSON 对象:
var x = {
"name": "LT",
"size": 10,
"nodes": [
{
"name": "Kaunas",
"size": 2,
"nodes": [
{
"name": "Centras",
"size": 1,
"nodes": [
{
"name": "lasives al.",
"size": 0.5,
"nodes": []
}
]
},
{
"name": "Žaliakalnis",
"size": 1,
"nodes": []
}
]
},
{
"name": "Vilnius",`enter code here`
"size": 4,
"nodes": []
}
]
}
我的解决方案只是遍历对象,但我无法弄清楚如何根据深度打印所有内容。
var name = [];
function Print(data) {
for(var da in data) {
if(data.hasOwnProperty(da) && typeof data[da] === 'object') {
Print(data[da])
} else {
name.push(data[da]);
}
}
}
Print(x);
试过似乎一切,我认为它应该接近一行代码,但无法弄清楚。似乎缺乏知识:)
解决方案
我会使用一个接受前缀字符串的递归函数,请参阅评论:
function render(obj, prefix = "") {
// Show this object's information
console.log(prefix + obj.name + " " + obj.size);
// Add its name to the prefix
prefix += obj.name + " - ";
// Recurse for each of its nodes
for (const node of obj.nodes) {
render(node, prefix);
}
}
render(x);
var x = {
"name": "LT",
"size": 10,
"nodes": [
{
"name": "Kaunas",
"size": 2,
"nodes": [
{
"name": "Centras",
"size": 1,
"nodes": [
{
"name": "lasives al.",
"size": 0.5,
"nodes": []
}
]
},
{
"name": "Žaliakalnis",
"size": 1,
"nodes": []
}
]
},
{
"name": "Vilnius",
"size": 4,
"nodes": []
}
]
};
function render(obj, prefix = "") {
// Show this object's information
console.log(prefix + obj.name + " " + obj.size);
// Add its name to the prefix
prefix += obj.name + " - ";
// Recurse for each of its nodes
for (const node of obj.nodes) {
render(node, prefix);
}
}
render(x);
这使用了一些 ES2015+ 特性,但 ES5 版本非常相似:
function render(obj, prefix) {
prefix = prefix || "";
console.log(prefix + obj.name + " " + obj.size);
prefix += obj.name + " - ";
obj.nodes.forEach(function(node) {
render(node, prefix);
});
}
render(x);
推荐阅读
- snowflake-cloud-data-platform - 4层嵌套Json,如何展平?
- python-3.x - Python中的多部分POST请求
- django - Django DecimalField max_digits 的最大值是多少?
- php - 读取简单的 API 返回空白屏幕?
- javascript - 使用评估时不同操作系统中的 Puppeteer 错误
- javascript - 如何将加载屏幕添加到网站
- html - 为什么 flex-direction: row 在列中渲染项目?
- apache-spark - 如何在连接到 kafka 集群时禁用结构化流中的“spark.security.credentials.${service}.enabled”
- hyperledger-fabric - 如何使用 QSCC 查询 Hyperledger Fabric 中的区块信息?
- machine-learning - 为什么 KS 曲线以 (0,0) 开头?