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
            }
          ]
        }
      ]
    }
Biku7
  • 450
  • 6
  • 16

1 Answers1

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))
Arun Kumar Mohan
  • 11,517
  • 3
  • 23
  • 44