1

I have this data of objects , but unable to get expected output we need to iterate on object children and print the name values in a particular order as given below

expected output :

 kiran
    vish
     lav
     mall

tried code :

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

please correct my program as I m unable to get correct output

1

2 Answers 2

2
  1. Move your parent console.log out of loop
  2. Do not change level in loop, just pass 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)

Sign up to request clarification or add additional context in comments.

Comments

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.