我有这些对象的数据, 但无法获得预期的输出 我们需要遍历对象子对象,并按以下特定顺序打印名称值
预期输出:
kiran
vish
lav
mall
尝试的代码:
let data = {
name: 'kiran',
children: [{
name: 'vish',
children: [{
name: 'lav',
children: []
},
{
name: 'mall',
children: []
}
]
}]
}
/* kiran
vish
lav
mall */
function indent(inputData) {
function indentHandler(inpData, level, output) {
if (!output) {
let output = '';
}
if (inpData.children.length) {
for (let i = 0; i < inpData.children.length; i++) {
level = level + 1;
console.log(addSpaces(level) + inpData.name + '\n');
indentHandler(inpData.children[i], level);
}
} else {
console.log(addSpaces(level) + inpData.name + '\n');
}
return output;
}
return indentHandler(inputData, 0, '');
}
function addSpaces(level) {
let outp = '';
for (let i = 0; i < level; i++) {
outp = outp + ' ';
}
return outp;
}
indent(data)
https://jsbin.com/yanogok/edit?js,console
请纠正我的程序,因为我无法获得正确的输出
答案 0 :(得分:2)
console.log
移出循环level
,只需传递level + 1
let data = {
name: 'kiran',
children: [{
name: 'vish',
children: [{
name: 'lav',
children: []
},
{
name: 'mall',
children: []
}
]
}]
}
/* kiran
vish
lav
mall */
function indent(inputData) {
function indentHandler(inpData, level, output) {
if (!output) {
let output = '';
}
if (inpData.children.length) {
console.log(addSpaces(level) + inpData.name + '\n');
for (let i = 0; i < inpData.children.length; i++) {
indentHandler(inpData.children[i], level + 1);
}
} else {
console.log(addSpaces(level) + inpData.name + '\n');
}
return output;
}
return indentHandler(inputData, 0, '');
}
function addSpaces(level) {
let outp = '';
for (let i = 0; i < level; i++) {
outp = outp + ' ';
}
return outp;
}
indent(data)
答案 1 :(得分:1)
function indent(data){
output = '';
return (function indentHandler(data, level){
output += addSpaces(level) + data['name'] + '\n';
if (data['children'].length === 0){
return output;
}
level += 1;
data['children'].forEach(function(child){
return indentHandler(child, level);
});
return output;
})(data, 0, '');
}
function addSpaces(level) {
let outp = '';
for (let i = 0; i < level; i++) {
outp = outp + ' ';
}
return outp;
}
indent(data)
答案 2 :(得分:1)
let data = {
name: 'kiran',
children: [{
name: 'Akash',
children: [{
name: 'Hamza',
children: []
},
{
name: 'David',
children: []
},
{
name: 'Sultan',
children: [{
name: 'Babar',
children: []
},
{
name: 'Noor',
children: []
}
]
}
]
},
{
name: 'Smith',
children: []
}
]
}
function indent(inputData) {
function indentHandler(inpData, level, output) {
if (!output) {
let output = '';
}
if (inpData.children.length) {
console.log(addSpaces(level) + inpData.name + '\t');
for (let i = 0; i < inpData.children.length; i++) {
indentHandler(inpData.children[i], level + 1);
}
} else {
console.log(addSpaces(level) + inpData.name + '');
}
return output;
}
return indentHandler(inputData, 0, ' ');
}
function addSpaces(level) {
let outp = '';
for (let i = 0; i < level; i++) {
outp = outp + ' ';
}
return outp;
}
indent(data);