如何访问或遍历嵌套的对象数组,有时可能是无限的,或者用户在 nodejs 中的 jSON 数组对象中不断添加?

问题描述

我有一个 JSON 对象,它有一个嵌套数组作为子对象。所以基本上我有一个可以不断扩大的家谱,这意味着可以增加孩子。我想通过循环访问这个家谱中的每个对象。我怎样才能做到这一点?我想不开。或者也许有其他方法可以实现这一目标?

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

解决方法

您可以使用递归访问家庭中的每个人。例如,如果要显示每个家庭成员的姓名,则可以显示该人的姓名,然后为每个孩子递归调用该函数。

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

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

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

display(familyHead)

如果要返回所有姓名的数组,请将人名添加到列表中,然后为每个孩子递归调用该函数。

const familyHead = { name: 'Shan',generation: 103 } ]} ]}

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

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

console.log(getNames(familyHead))