问题描述
我有一个 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))