0

I have a JSON object which has a nested array as children. So basically I have a family tree that can gets keep expanding means the addition of children can happen. And I want to access every object inside this family tree via a loop. How can I do that? I am unable to think away. Or maybe any other way to achieve this?

exports familyHead = {
      name: 'Shan',
      type:String,
      generation:101,
      children : [
        {
          name: 'Chit',
          type:String,
          gender:'Male',
          generation:102,
          children :[
            {
              name: 'Dritha',
              type:String,
              gender:'Female',
              generation:103,
              children:[
                {
                  name: 'Yodhan',
                  type:String,
                  gender:'Male',
                  generation:104
                }
              ]
            },
            {
              name: 'Tritha',
              type:String,
              gender:'Female',
              generation:103
            },
            {
              name: 'Vritha',
              type:String,
              gender:'Male',
              generation:103
            }
          ]
        },
        {
          name: 'Ish',
          type:String,
          gender:'Male',
          generation:102
        },
        {
          name: 'Vich',
          type:String,
          gender:'Male',
          generation:102,
          children:[
            {
              name: 'Vila',
              type:String,
              gender:'Female',
              generation:103
          },
          {
            name: 'Chika',
            type:String,
            gender:'Female',
            generation:103
        }
        ]
        },
        {
          name: 'Aras',
          type:String,
          gender:'Male',
          generation:102,
          children:[
            {
              name: 'Jinki',
              type:String,
              gender:'Female',
              generation:103,
              children:[
                {
                  name: 'Laki',
                  type:String,
                  gender:'Male',
                  generation:104
                },
                {
                  name: 'Lavanya',
                  type:String,
                  gender:'Female',
                  generation:104
                }
              ]
          },
          {
            name: 'Ahit',
            type:String,
            gender:'Male',
            generation:103
        }
          ]
        },
        {
          name: 'Satya',
          type:String,
          gender:'Female',
          generation:102,
          children:[
            {
              name: 'Asva',
              type:String,
              gender:'Male',
              generation:103,
              children:[
                {
                  name: 'Vasa',
                  type:String,
                  gender:'Male',
                  generation:104
                }
              ]
            },
            {
              name: 'Vyas',
              type:String,
              gender:'Male',
              generation:103,
              children:[
                {
                  name: 'Kriya',
                  type:String,
                  gender:'Male',
                  generation:104
                },
                {
                  name: 'Krithi',
                  type:String,
                  gender:'Male',
                  generation:104
                }
              ]
            },
            {
              name: 'Atya',
              type:String,
              gender:'Female',
              generation:103
            }
          ]
        }
      ]
    }
0

1 Answer 1

2

You can use recursion to access every person in the family. If you want to display every family member's name, for example, you can display the person's name and then recursively call the function for each child.

const familyHead = { name: 'Shan', generation: 101, children: [{ name: 'Chit', gender: 'Male', generation: 102, children: [{ name: 'Dritha', gender: 'Female', generation: 103, children: [{ name: 'Yodhan', gender: 'Male', generation: 104 } ]}, { name: 'Tritha', gender: 'Female', generation: 103}, { name: 'Vritha', gender: 'Male', generation: 103 } ]}, { name: 'Ish', gender: 'Male', generation: 102}, { name: 'Vich', gender: 'Male', generation: 102, children: [{ name: 'Vila', gender: 'Female', generation: 103}, { name: 'Chika', gender: 'Female', generation: 103 } ]}, { name: 'Aras', gender: 'Male', generation: 102, children: [{ name: 'Jinki', gender: 'Female', generation: 103, children: [{ name: 'Laki', gender: 'Male', generation: 104}, { name: 'Lavanya', gender: 'Female', generation: 104 } ]}, { name: 'Ahit', gender: 'Male', generation: 103 } ]}, { name: 'Satya', type: String, gender: 'Female', generation: 102, children: [{ name: 'Asva', gender: 'Male', generation: 103, children: [{ name: 'Vasa', gender: 'Male', generation: 104 } ]}, { name: 'Vyas', gender: 'Male', generation: 103, children: [{ name: 'Kriya', gender: 'Male', generation: 104}, { name: 'Krithi', gender: 'Male', generation: 104 } ]}, { name: 'Atya', gender: 'Female', generation: 103 } ]} ]};

const display = (person) => {
  console.log(person.name)

  if (person.children) {
    person.children.forEach(display)
  }
}

display(familyHead)

If you want to return an array of all the names, add the person's name to a list and recursively call the function for each child.

const familyHead = { name: 'Shan', generation: 101, children: [{ name: 'Chit', gender: 'Male', generation: 102, children: [{ name: 'Dritha', gender: 'Female', generation: 103, children: [{ name: 'Yodhan', gender: 'Male', generation: 104 } ]}, { name: 'Tritha', gender: 'Female', generation: 103}, { name: 'Vritha', gender: 'Male', generation: 103 } ]}, { name: 'Ish', gender: 'Male', generation: 102}, { name: 'Vich', gender: 'Male', generation: 102, children: [{ name: 'Vila', gender: 'Female', generation: 103}, { name: 'Chika', gender: 'Female', generation: 103 } ]}, { name: 'Aras', gender: 'Male', generation: 102, children: [{ name: 'Jinki', gender: 'Female', generation: 103, children: [{ name: 'Laki', gender: 'Male', generation: 104}, { name: 'Lavanya', gender: 'Female', generation: 104 } ]}, { name: 'Ahit', gender: 'Male', generation: 103 } ]}, { name: 'Satya', type: String, gender: 'Female', generation: 102, children: [{ name: 'Asva', gender: 'Male', generation: 103, children: [{ name: 'Vasa', gender: 'Male', generation: 104 } ]}, { name: 'Vyas', gender: 'Male', generation: 103, children: [{ name: 'Kriya', gender: 'Male', generation: 104}, { name: 'Krithi', gender: 'Male', generation: 104 } ]}, { name: 'Atya', gender: 'Female', generation: 103 } ]} ]}

const getNames = (person) => {
  if (!person.children) {
    return [person.name]
  }

  return [person.name, ...person.children.flatMap(getNames)]
}

console.log(getNames(familyHead))

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

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.