我有一个对象,
var cObj = {
name: 'Object1',
oNumbers: 3,
leaf: [
{
name: 'Inner Object 1',
oNumbers: 4,
leaf: []
},
{
name: 'Inner Object 2',
oNumbers: 9,
children: [
{
name: 'Inner Object 1 2',
oNumbers: 2,
leaf: []
}
]
}
]
}
我想遍历所有节点并想要打印 例如:
Object 1
Number 3
Inner Object 1
Number 4
Inner Object 2
Number 9
Inner Object 1 2
Number 2
我正在考虑使用递归循环但无法实现。有人可以指导我完成。
答案 0 :(得分:0)
如果结构如您所说,请使用此功能。
function loop(parent, spaces) {
var output = "";
spaces = spaces || 0;
if (parent.length>0 ) {
for(var index in parent) {
output += loop(parent[index], spaces+1);
}
} else {
for(var prop in parent) {
output +=" ".repeat(spaces) + prop + " : "
if (Array.isArray(parent[prop])) {
output +="\n";
output += loop(parent[prop],spaces+1);
} else {
output += parent[prop] + "\n";
}
}
}
return output;
}
console.log(loop(cObj));
答案 1 :(得分:0)
是的,你基本上可以写一个递归函数来实现这个目的。请查看下面的代码段:
var cObj = {
name: 'Object1',
oNumbers: 3,
leaf: [
{
name: 'Inner Object 1',
oNumbers: 4,
leaf: []
},
{
name: 'Inner Object 2',
oNumbers: 9,
children: [
{
name: 'Inner Object 1 2',
oNumbers: 2,
leaf: []
}
]
}
]
};
function printTree(root, level){
printValue(root.name, level);
printValue('Number ' + root.oNumbers, level);
var children;
if(root.leaf == null)
{
children = root.children;
}
else
{
children = root.leaf;
}
if(children == null || children.length == 0){
return;
}
for(var index = 0; index < children.length; index++){
printTree(children[index], level + 1);
}
}
function printValue(value, totalSpaces){
var spaces = ' ';
for(var counter = 0; counter < totalSpaces; counter++){
spaces += ' ';
}
console.log(spaces + value);
}
printTree(cObj, 0);
printTree(root,level):打印根节点并调用相同的函数 递归地为它的每个孩子。 level表示节点的级别,0表示最顶层/根对象。 由于该对象可以包含叶子/子项,因此添加了空检查,可以根据数据模型进行修改。
printValue(value,totalSpaces):在显示节点值之前完成打印空格(在已发布的示例中获取分层显示)